about summary refs log tree commit diff
path: root/REORG.TODO/stdlib
diff options
context:
space:
mode:
Diffstat (limited to 'REORG.TODO/stdlib')
-rw-r--r--REORG.TODO/stdlib/Depend1
-rw-r--r--REORG.TODO/stdlib/Makefile221
-rw-r--r--REORG.TODO/stdlib/Versions135
-rw-r--r--REORG.TODO/stdlib/a64l.c64
-rw-r--r--REORG.TODO/stdlib/abort.c142
-rw-r--r--REORG.TODO/stdlib/abs.c27
-rw-r--r--REORG.TODO/stdlib/add_n.c53
-rw-r--r--REORG.TODO/stdlib/addmul_1.c61
-rw-r--r--REORG.TODO/stdlib/alloca.h40
-rw-r--r--REORG.TODO/stdlib/at_quick_exit.c50
-rw-r--r--REORG.TODO/stdlib/atexit.c52
-rw-r--r--REORG.TODO/stdlib/atof.c28
-rw-r--r--REORG.TODO/stdlib/atoi.c28
-rw-r--r--REORG.TODO/stdlib/atol.c28
-rw-r--r--REORG.TODO/stdlib/atoll.c28
-rw-r--r--REORG.TODO/stdlib/bits/monetary-ldbl.h27
-rw-r--r--REORG.TODO/stdlib/bits/stdlib-float.h29
-rw-r--r--REORG.TODO/stdlib/bits/stdlib-ldbl.h41
-rw-r--r--REORG.TODO/stdlib/bits/stdlib.h155
-rw-r--r--REORG.TODO/stdlib/bsearch.c23
-rw-r--r--REORG.TODO/stdlib/bug-fmtmsg1.c28
-rw-r--r--REORG.TODO/stdlib/bug-getcontext.c76
-rw-r--r--REORG.TODO/stdlib/bug-strtod.c67
-rw-r--r--REORG.TODO/stdlib/bug-strtod2.c57
-rw-r--r--REORG.TODO/stdlib/canonicalize.c246
-rw-r--r--REORG.TODO/stdlib/cmp.c48
-rw-r--r--REORG.TODO/stdlib/cxa_at_quick_exit.c30
-rw-r--r--REORG.TODO/stdlib/cxa_atexit.c133
-rw-r--r--REORG.TODO/stdlib/cxa_finalize.c82
-rw-r--r--REORG.TODO/stdlib/cxa_thread_atexit_impl.c165
-rw-r--r--REORG.TODO/stdlib/dbl2mpn.c31
-rw-r--r--REORG.TODO/stdlib/div.c62
-rw-r--r--REORG.TODO/stdlib/divmod_1.c199
-rw-r--r--REORG.TODO/stdlib/divrem.c234
-rw-r--r--REORG.TODO/stdlib/drand48-iter.c56
-rw-r--r--REORG.TODO/stdlib/drand48.c30
-rw-r--r--REORG.TODO/stdlib/drand48_r.c27
-rw-r--r--REORG.TODO/stdlib/erand48.c30
-rw-r--r--REORG.TODO/stdlib/erand48_r.c47
-rw-r--r--REORG.TODO/stdlib/errno.h72
-rw-r--r--REORG.TODO/stdlib/exit.c107
-rw-r--r--REORG.TODO/stdlib/exit.h77
-rw-r--r--REORG.TODO/stdlib/fmtmsg.c386
-rw-r--r--REORG.TODO/stdlib/fmtmsg.h105
-rw-r--r--REORG.TODO/stdlib/fpioconst.c1329
-rw-r--r--REORG.TODO/stdlib/fpioconst.h88
-rw-r--r--REORG.TODO/stdlib/gen-fpioconst.c108
-rw-r--r--REORG.TODO/stdlib/gen-tst-strtod-round.c191
-rw-r--r--REORG.TODO/stdlib/getcontext.c29
-rw-r--r--REORG.TODO/stdlib/getentropy.c31
-rw-r--r--REORG.TODO/stdlib/getenv.c92
-rw-r--r--REORG.TODO/stdlib/getrandom.c31
-rw-r--r--REORG.TODO/stdlib/getsubopt.c79
-rw-r--r--REORG.TODO/stdlib/gmp-impl.h367
-rw-r--r--REORG.TODO/stdlib/gmp.h623
-rw-r--r--REORG.TODO/stdlib/grouping.c201
-rw-r--r--REORG.TODO/stdlib/grouping.h33
-rw-r--r--REORG.TODO/stdlib/groupingwc.c2
-rw-r--r--REORG.TODO/stdlib/inlines.c3
-rw-r--r--REORG.TODO/stdlib/isomac.c447
-rw-r--r--REORG.TODO/stdlib/jrand48.c30
-rw-r--r--REORG.TODO/stdlib/jrand48_r.c34
-rw-r--r--REORG.TODO/stdlib/l64a.c56
-rw-r--r--REORG.TODO/stdlib/labs.c28
-rw-r--r--REORG.TODO/stdlib/lcong48.c26
-rw-r--r--REORG.TODO/stdlib/lcong48_r.c36
-rw-r--r--REORG.TODO/stdlib/ldbl2mpn.c1
-rw-r--r--REORG.TODO/stdlib/ldiv.c31
-rw-r--r--REORG.TODO/stdlib/llabs.c29
-rw-r--r--REORG.TODO/stdlib/lldiv.c32
-rw-r--r--REORG.TODO/stdlib/longlong.h1773
-rw-r--r--REORG.TODO/stdlib/lrand48.c30
-rw-r--r--REORG.TODO/stdlib/lrand48_r.c30
-rw-r--r--REORG.TODO/stdlib/lshift.c78
-rw-r--r--REORG.TODO/stdlib/makecontext.c28
-rw-r--r--REORG.TODO/stdlib/mblen.c68
-rw-r--r--REORG.TODO/stdlib/mbstowcs.c39
-rw-r--r--REORG.TODO/stdlib/mbtowc.c72
-rw-r--r--REORG.TODO/stdlib/mod_1.c189
-rw-r--r--REORG.TODO/stdlib/monetary.h58
-rw-r--r--REORG.TODO/stdlib/mp_clz_tab.c36
-rw-r--r--REORG.TODO/stdlib/mpn2dbl.c29
-rw-r--r--REORG.TODO/stdlib/mpn2flt.c29
-rw-r--r--REORG.TODO/stdlib/mpn2ldbl.c1
-rw-r--r--REORG.TODO/stdlib/mrand48.c30
-rw-r--r--REORG.TODO/stdlib/mrand48_r.c29
-rw-r--r--REORG.TODO/stdlib/msort.c310
-rw-r--r--REORG.TODO/stdlib/mul.c142
-rw-r--r--REORG.TODO/stdlib/mul_1.c55
-rw-r--r--REORG.TODO/stdlib/mul_n.c360
-rw-r--r--REORG.TODO/stdlib/nrand48.c30
-rw-r--r--REORG.TODO/stdlib/nrand48_r.c37
-rw-r--r--REORG.TODO/stdlib/old_atexit.c8
-rw-r--r--REORG.TODO/stdlib/on_exit.c41
-rw-r--r--REORG.TODO/stdlib/putenv.c87
-rw-r--r--REORG.TODO/stdlib/qsort.c249
-rw-r--r--REORG.TODO/stdlib/quick_exit.c48
-rw-r--r--REORG.TODO/stdlib/rand.c28
-rw-r--r--REORG.TODO/stdlib/rand_r.c48
-rw-r--r--REORG.TODO/stdlib/random.c300
-rw-r--r--REORG.TODO/stdlib/random_r.c401
-rw-r--r--REORG.TODO/stdlib/rpmatch.c61
-rw-r--r--REORG.TODO/stdlib/rshift.c78
-rw-r--r--REORG.TODO/stdlib/secure-getenv.c36
-rw-r--r--REORG.TODO/stdlib/seed48.c28
-rw-r--r--REORG.TODO/stdlib/seed48_r.c39
-rw-r--r--REORG.TODO/stdlib/setcontext.c29
-rw-r--r--REORG.TODO/stdlib/setenv.c340
-rw-r--r--REORG.TODO/stdlib/srand48.c26
-rw-r--r--REORG.TODO/stdlib/srand48_r.c39
-rw-r--r--REORG.TODO/stdlib/stdlib.h911
-rw-r--r--REORG.TODO/stdlib/strfmon.c39
-rw-r--r--REORG.TODO/stdlib/strfmon_l.c625
-rw-r--r--REORG.TODO/stdlib/strfrom-skeleton.c155
-rw-r--r--REORG.TODO/stdlib/strfromd.c22
-rw-r--r--REORG.TODO/stdlib/strfromf.c22
-rw-r--r--REORG.TODO/stdlib/strfroml.c22
-rw-r--r--REORG.TODO/stdlib/strtod.c80
-rw-r--r--REORG.TODO/stdlib/strtod_l.c1787
-rw-r--r--REORG.TODO/stdlib/strtod_nan.c24
-rw-r--r--REORG.TODO/stdlib/strtod_nan_double.h30
-rw-r--r--REORG.TODO/stdlib/strtod_nan_float.h29
-rw-r--r--REORG.TODO/stdlib/strtod_nan_main.c63
-rw-r--r--REORG.TODO/stdlib/strtod_nan_narrow.h22
-rw-r--r--REORG.TODO/stdlib/strtod_nan_wide.h22
-rw-r--r--REORG.TODO/stdlib/strtof.c34
-rw-r--r--REORG.TODO/stdlib/strtof_l.c38
-rw-r--r--REORG.TODO/stdlib/strtof_nan.c24
-rw-r--r--REORG.TODO/stdlib/strtoimax.c1
-rw-r--r--REORG.TODO/stdlib/strtol.c109
-rw-r--r--REORG.TODO/stdlib/strtol_l.c551
-rw-r--r--REORG.TODO/stdlib/strtold.c64
-rw-r--r--REORG.TODO/stdlib/strtold_l.c65
-rw-r--r--REORG.TODO/stdlib/strtold_nan.c30
-rw-r--r--REORG.TODO/stdlib/strtoll.c33
-rw-r--r--REORG.TODO/stdlib/strtoll_l.c27
-rw-r--r--REORG.TODO/stdlib/strtoul.c20
-rw-r--r--REORG.TODO/stdlib/strtoul_l.c27
-rw-r--r--REORG.TODO/stdlib/strtoull.c33
-rw-r--r--REORG.TODO/stdlib/strtoull_l.c28
-rw-r--r--REORG.TODO/stdlib/strtoumax.c1
-rw-r--r--REORG.TODO/stdlib/sub_n.c53
-rw-r--r--REORG.TODO/stdlib/submul_1.c61
-rw-r--r--REORG.TODO/stdlib/swapcontext.c29
-rw-r--r--REORG.TODO/stdlib/sys/errno.h1
-rw-r--r--REORG.TODO/stdlib/sys/random.h42
-rw-r--r--REORG.TODO/stdlib/system.c35
-rw-r--r--REORG.TODO/stdlib/tens_in_limb.c31
-rw-r--r--REORG.TODO/stdlib/test-a64l.c80
-rw-r--r--REORG.TODO/stdlib/test-canon.c235
-rw-r--r--REORG.TODO/stdlib/test-canon2.c74
-rw-r--r--REORG.TODO/stdlib/testdiv.c39
-rw-r--r--REORG.TODO/stdlib/testdiv.input2
-rw-r--r--REORG.TODO/stdlib/testmb.c65
-rw-r--r--REORG.TODO/stdlib/testmb2.c31
-rw-r--r--REORG.TODO/stdlib/testrand.c52
-rw-r--r--REORG.TODO/stdlib/testsort.c36
-rw-r--r--REORG.TODO/stdlib/tst-atof1.c19
-rw-r--r--REORG.TODO/stdlib/tst-atof2.c55
-rw-r--r--REORG.TODO/stdlib/tst-bsearch.c153
-rw-r--r--REORG.TODO/stdlib/tst-empty-env.c58
-rw-r--r--REORG.TODO/stdlib/tst-environ.c229
-rw-r--r--REORG.TODO/stdlib/tst-fmtmsg.c85
-rwxr-xr-xREORG.TODO/stdlib/tst-fmtmsg.sh337
-rw-r--r--REORG.TODO/stdlib/tst-getrandom.c245
-rw-r--r--REORG.TODO/stdlib/tst-limits.c72
-rw-r--r--REORG.TODO/stdlib/tst-makecontext.c110
-rw-r--r--REORG.TODO/stdlib/tst-makecontext2.c79
-rw-r--r--REORG.TODO/stdlib/tst-makecontext3.c220
-rw-r--r--REORG.TODO/stdlib/tst-putenv.c18
-rw-r--r--REORG.TODO/stdlib/tst-putenvmod.c17
-rw-r--r--REORG.TODO/stdlib/tst-qsort.c55
-rw-r--r--REORG.TODO/stdlib/tst-qsort2.c89
-rw-r--r--REORG.TODO/stdlib/tst-quick_exit.cc47
-rw-r--r--REORG.TODO/stdlib/tst-rand48-2.c116
-rw-r--r--REORG.TODO/stdlib/tst-rand48.c393
-rw-r--r--REORG.TODO/stdlib/tst-random.c122
-rw-r--r--REORG.TODO/stdlib/tst-random2.c61
-rw-r--r--REORG.TODO/stdlib/tst-secure-getenv.c242
-rw-r--r--REORG.TODO/stdlib/tst-setcontext.c244
-rw-r--r--REORG.TODO/stdlib/tst-setcontext2.c230
-rw-r--r--REORG.TODO/stdlib/tst-setcontext3.c138
-rw-r--r--REORG.TODO/stdlib/tst-setcontext3.sh52
-rw-r--r--REORG.TODO/stdlib/tst-strfmon_l.c220
-rw-r--r--REORG.TODO/stdlib/tst-strfrom-locale.c91
-rw-r--r--REORG.TODO/stdlib/tst-strfrom.c91
-rw-r--r--REORG.TODO/stdlib/tst-strfrom.h120
-rw-r--r--REORG.TODO/stdlib/tst-strtod-nan-locale-main.c89
-rw-r--r--REORG.TODO/stdlib/tst-strtod-nan-locale.c25
-rw-r--r--REORG.TODO/stdlib/tst-strtod-overflow.c49
-rw-r--r--REORG.TODO/stdlib/tst-strtod-round-data150
-rw-r--r--REORG.TODO/stdlib/tst-strtod-round-data.h11584
-rw-r--r--REORG.TODO/stdlib/tst-strtod-round-skeleton.c252
-rw-r--r--REORG.TODO/stdlib/tst-strtod-round.c24
-rw-r--r--REORG.TODO/stdlib/tst-strtod-underflow.c225
-rw-r--r--REORG.TODO/stdlib/tst-strtod.c218
-rw-r--r--REORG.TODO/stdlib/tst-strtod.h49
-rw-r--r--REORG.TODO/stdlib/tst-strtod1i.c84
-rw-r--r--REORG.TODO/stdlib/tst-strtod2.c44
-rw-r--r--REORG.TODO/stdlib/tst-strtod3.c55
-rw-r--r--REORG.TODO/stdlib/tst-strtod4.c56
-rw-r--r--REORG.TODO/stdlib/tst-strtod5.c89
-rw-r--r--REORG.TODO/stdlib/tst-strtod5i.c100
-rw-r--r--REORG.TODO/stdlib/tst-strtod6.c57
-rw-r--r--REORG.TODO/stdlib/tst-strtol-locale-main.c87
-rw-r--r--REORG.TODO/stdlib/tst-strtol-locale.c25
-rw-r--r--REORG.TODO/stdlib/tst-strtol.c626
-rw-r--r--REORG.TODO/stdlib/tst-strtoll.c401
-rw-r--r--REORG.TODO/stdlib/tst-system.c30
-rw-r--r--REORG.TODO/stdlib/tst-thread-quick_exit.cc66
-rw-r--r--REORG.TODO/stdlib/tst-tininess.c69
-rw-r--r--REORG.TODO/stdlib/tst-tls-atexit-lib.c38
-rw-r--r--REORG.TODO/stdlib/tst-tls-atexit-nodelete.c24
-rw-r--r--REORG.TODO/stdlib/tst-tls-atexit.c156
-rw-r--r--REORG.TODO/stdlib/tst-unsetenv1.c12
-rw-r--r--REORG.TODO/stdlib/tst-width-stdint.c185
-rw-r--r--REORG.TODO/stdlib/tst-width.c87
-rw-r--r--REORG.TODO/stdlib/tst-xpg-basename.c69
-rw-r--r--REORG.TODO/stdlib/ucontext.h52
-rw-r--r--REORG.TODO/stdlib/udiv_qrnnd.c10
-rw-r--r--REORG.TODO/stdlib/wcstoimax.c1
-rw-r--r--REORG.TODO/stdlib/wcstombs.c35
-rw-r--r--REORG.TODO/stdlib/wcstoumax.c1
-rw-r--r--REORG.TODO/stdlib/wctomb.c57
-rw-r--r--REORG.TODO/stdlib/xpg_basename.c71
225 files changed, 37988 insertions, 0 deletions
diff --git a/REORG.TODO/stdlib/Depend b/REORG.TODO/stdlib/Depend
new file mode 100644
index 0000000000..f3e1156a4e
--- /dev/null
+++ b/REORG.TODO/stdlib/Depend
@@ -0,0 +1 @@
+localedata
diff --git a/REORG.TODO/stdlib/Makefile b/REORG.TODO/stdlib/Makefile
new file mode 100644
index 0000000000..9b0acce8cc
--- /dev/null
+++ b/REORG.TODO/stdlib/Makefile
@@ -0,0 +1,221 @@
+# Copyright (C) 1991-2017 Free Software Foundation, Inc.
+# This file is part of the GNU C Library.
+
+# The GNU C Library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+
+# The GNU C 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
+# Lesser General Public License for more details.
+
+# You should have received a copy of the GNU Lesser General Public
+# License along with the GNU C Library; if not, see
+# <http://www.gnu.org/licenses/>.
+
+#
+#	Makefile for stdlib routines
+#
+subdir	:= stdlib
+
+include ../Makeconfig
+
+headers	:= stdlib.h bits/stdlib.h bits/stdlib-ldbl.h bits/stdlib-float.h      \
+	   monetary.h bits/monetary-ldbl.h				      \
+	   inttypes.h stdint.h bits/wordsize.h				      \
+	   errno.h sys/errno.h bits/errno.h				      \
+	   ucontext.h sys/ucontext.h					      \
+	   alloca.h fmtmsg.h						      \
+	   bits/stdlib-bsearch.h sys/random.h bits/stdint-intn.h	      \
+	   bits/stdint-uintn.h
+
+routines	:=							      \
+	atof atoi atol atoll						      \
+	abort								      \
+	bsearch qsort msort						      \
+	getenv putenv setenv secure-getenv				      \
+	exit on_exit atexit cxa_atexit cxa_finalize old_atexit		      \
+	quick_exit at_quick_exit cxa_at_quick_exit cxa_thread_atexit_impl     \
+	abs labs llabs							      \
+	div ldiv lldiv							      \
+	mblen mbstowcs mbtowc wcstombs wctomb				      \
+	random random_r rand rand_r					      \
+	drand48 erand48 lrand48 nrand48 mrand48 jrand48			      \
+	srand48 seed48 lcong48						      \
+	drand48_r erand48_r lrand48_r nrand48_r mrand48_r jrand48_r	      \
+	srand48_r seed48_r lcong48_r					      \
+	drand48-iter getrandom getentropy				      \
+	strfromf strfromd strfroml					      \
+	strtol strtoul strtoll strtoull					      \
+	strtol_l strtoul_l strtoll_l strtoull_l				      \
+	strtof strtod strtold						      \
+	strtof_l strtod_l strtold_l					      \
+	strtof_nan strtod_nan strtold_nan				      \
+	system canonicalize						      \
+	a64l l64a							      \
+	rpmatch strfmon strfmon_l getsubopt xpg_basename fmtmsg		      \
+	strtoimax strtoumax wcstoimax wcstoumax				      \
+	getcontext setcontext makecontext swapcontext
+aux =	grouping groupingwc tens_in_limb
+
+# These routines will be omitted from the libc shared object.
+# Instead the static object files will be included in a special archive
+# linked against when the shared library will be used.
+static-only-routines = atexit at_quick_exit
+
+test-srcs	:= tst-fmtmsg
+tests		:= tst-strtol tst-strtod testmb testrand testsort testdiv   \
+		   test-canon test-canon2 tst-strtoll tst-environ	    \
+		   tst-xpg-basename tst-random tst-random2 tst-bsearch	    \
+		   tst-limits tst-rand48 bug-strtod tst-setcontext	    \
+		   tst-setcontext2 test-a64l tst-qsort tst-system testmb2   \
+		   bug-strtod2 tst-atof1 tst-atof2 tst-strtod2		    \
+		   tst-rand48-2 tst-makecontext tst-strtod5		    \
+		   tst-qsort2 tst-makecontext2 tst-strtod6 tst-unsetenv1    \
+		   tst-makecontext3 bug-getcontext bug-fmtmsg1		    \
+		   tst-secure-getenv tst-strtod-overflow tst-strtod-round   \
+		   tst-tininess tst-strtod-underflow tst-setcontext3	    \
+		   tst-strtol-locale tst-strtod-nan-locale tst-strfmon_l    \
+		   tst-quick_exit tst-thread-quick_exit tst-width	    \
+		   tst-width-stdint tst-strfrom tst-strfrom-locale	    \
+		   tst-getrandom
+tests-internal	:= tst-strtod1i tst-strtod3 tst-strtod4 tst-strtod5i \
+		   tst-tls-atexit tst-tls-atexit-nodelete
+tests-static	:= tst-secure-getenv
+
+ifeq ($(build-hardcoded-path-in-tests),yes)
+tests += tst-empty-env
+endif
+
+ifeq ($(have-cxx-thread_local),yes)
+CFLAGS-tst-quick_exit.o = -std=c++11
+LDLIBS-tst-quick_exit = -lstdc++
+CFLAGS-tst-thread-quick_exit.o = -std=c++11
+LDLIBS-tst-thread-quick_exit = -lstdc++
+$(objpfx)tst-thread-quick_exit: $(shared-thread-library)
+else
+tests-unsupported += tst-quick_exit tst-thread-quick_exit
+endif
+
+modules-names	= tst-tls-atexit-lib
+extra-test-objs += $(addsuffix .os, $(modules-names))
+
+ifeq ($(build-shared),yes)
+tests		+= tst-putenv
+endif
+
+# Several mpn functions from GNU MP are used by the strtod function.
+mpn-routines := inlines add_n addmul_1 cmp divmod_1 divrem udiv_qrnnd \
+		lshift rshift mod_1 mul mul_1 mul_n sub_n submul_1
+mpn-headers = longlong.h gmp.h gmp-impl.h gmp-mparam.h asm-syntax.h
+
+routines := $(strip $(routines) $(mpn-routines))	\
+	    dbl2mpn ldbl2mpn				\
+	    mpn2flt mpn2dbl mpn2ldbl
+aux += fpioconst mp_clz_tab
+
+tests-extras += tst-putenvmod
+extra-test-objs += tst-putenvmod.os
+
+generated += isomac isomac.out tst-putenvmod.so
+
+CFLAGS-bsearch.c = $(uses-callbacks)
+CFLAGS-msort.c = $(uses-callbacks)
+CFLAGS-qsort.c = $(uses-callbacks)
+CFLAGS-system.c = -fexceptions
+CFLAGS-system.os = -fomit-frame-pointer
+CFLAGS-fmtmsg.c = -fexceptions
+
+CFLAGS-strfmon.c = $(libio-mtsafe)
+CFLAGS-strfmon_l.c = $(libio-mtsafe)
+
+# The strfrom class of functions call __printf_fp in order to convert the
+# floating-point value to characters.  This requires the value of IO_MTSAFE_IO.
+CFLAGS-strfromd.c = $(libio-mtsafe)
+CFLAGS-strfromf.c = $(libio-mtsafe)
+CFLAGS-strfroml.c = $(libio-mtsafe)
+
+CFLAGS-tst-bsearch.c = $(stack-align-test-flags)
+CFLAGS-tst-qsort.c = $(stack-align-test-flags)
+CFLAGS-tst-makecontext.c += -funwind-tables
+CFLAGS-tst-makecontext2.c = $(stack-align-test-flags)
+
+# Run a test on the header files we use.
+tests-special += $(objpfx)isomac.out
+
+ifeq ($(run-built-tests),yes)
+tests-special += $(objpfx)tst-fmtmsg.out
+endif
+
+include ../Rules
+
+ifeq ($(run-built-tests),yes)
+LOCALES := cs_CZ.UTF-8 de_DE.UTF-8 en_US.ISO-8859-1 tr_TR.UTF-8 \
+	   tr_TR.ISO-8859-9 tg_TJ.UTF-8 te_IN.UTF-8 bn_IN.UTF-8 \
+	   el_GR.UTF-8
+include ../gen-locales.mk
+
+$(objpfx)bug-strtod2.out: $(gen-locales)
+$(objpfx)testmb2.out: $(gen-locales)
+$(objpfx)tst-strtod.out: $(gen-locales)
+$(objpfx)tst-strtod3.out: $(gen-locales)
+$(objpfx)tst-strtod4.out: $(gen-locales)
+$(objpfx)tst-strtod5.out: $(gen-locales)
+$(objpfx)tst-strtol-locale.out: $(gen-locales)
+$(objpfx)tst-strtod-nan-locale.out: $(gen-locales)
+$(objpfx)tst-strfmon_l.out: $(gen-locales)
+$(objpfx)tst-strfrom.out: $(gen-locales)
+$(objpfx)tst-strfrom-locale.out: $(gen-locales)
+endif
+
+# Testdir has to be named stdlib and needs to be writable
+test-canon-ARGS = --test-dir=${common-objpfx}stdlib
+
+bug-fmtmsg1-ENV = SEV_LEVEL=foo,11,newsev
+
+$(objpfx)isomac.out: $(objpfx)isomac
+	$(dir $<)$(notdir $<) '$(CC)'  \
+	'-I../include $(+sysdep-includes) $(sysincludes) -I..' > $<.out; \
+	$(evaluate-test)
+
+isomac-CFLAGS = -O
+$(objpfx)isomac: isomac.c
+	$(native-compile)
+
+$(objpfx)tst-fmtmsg.out: tst-fmtmsg.sh $(objpfx)tst-fmtmsg
+	$(SHELL) $< $(common-objpfx) '$(test-program-prefix-before-env)' \
+		 '$(run-program-env)' '$(test-program-prefix-after-env)' \
+		 $(common-objpfx)stdlib/; \
+	$(evaluate-test)
+
+$(objpfx)tst-putenv: $(objpfx)tst-putenvmod.so
+LDFLAGS-tst-putenv = $(no-as-needed)
+
+$(objpfx)tst-putenvmod.so: $(objpfx)tst-putenvmod.os $(link-libc-deps)
+	$(build-module)
+libof-tst-putenvmod = extramodules
+
+$(objpfx)bug-getcontext: $(libm)
+$(objpfx)tst-strtod-round: $(libm)
+$(objpfx)tst-tininess: $(libm)
+$(objpfx)tst-strtod-underflow: $(libm)
+$(objpfx)tst-strtod6: $(libm)
+$(objpfx)tst-strtod-nan-locale: $(libm)
+
+tst-tls-atexit-lib.so-no-z-defs = yes
+
+$(objpfx)tst-tls-atexit: $(shared-thread-library) $(libdl)
+$(objpfx)tst-tls-atexit.out: $(objpfx)tst-tls-atexit-lib.so
+
+$(objpfx)tst-tls-atexit-nodelete: $(shared-thread-library) $(libdl)
+$(objpfx)tst-tls-atexit-nodelete.out: $(objpfx)tst-tls-atexit-lib.so
+
+$(objpfx)tst-setcontext3.out: tst-setcontext3.sh $(objpfx)tst-setcontext3
+	$(SHELL) $< $(common-objpfx) '$(test-program-prefix-before-env)' \
+		 '$(run-program-env)' '$(test-program-prefix-after-env)' \
+		 $(common-objpfx)stdlib/; \
+	$(evaluate-test)
+
+$(objpfx)tst-makecontext: $(libdl)
diff --git a/REORG.TODO/stdlib/Versions b/REORG.TODO/stdlib/Versions
new file mode 100644
index 0000000000..9cade20a06
--- /dev/null
+++ b/REORG.TODO/stdlib/Versions
@@ -0,0 +1,135 @@
+libc {
+  GLIBC_2.0 {
+    # functions with required interface outside normal name space
+    __xpg_basename;
+
+    # functions used in inline functions or macros
+    __strtod_internal; __strtof_internal; __strtold_internal;
+    __strtol_internal; __strtoll_internal;
+    __strtoul_internal; __strtoull_internal;
+    # functions formerly so used (compatibility symbols)
+    __strtoq_internal; __strtouq_internal;
+
+    # compatibility symbol
+    __secure_getenv;
+
+    # a*
+    a64l; abort; abs; atexit; atof; atoi; atol; atoll;
+
+    # b*
+    bsearch;
+
+    # c*
+    canonicalize_file_name; clearenv;
+
+    # d*
+    div; drand48; drand48_r;
+
+    # e*
+    erand48; erand48_r; exit;
+
+    # g*
+    getenv; getsubopt;
+
+    # i*
+    initstate; initstate_r;
+
+    # l*
+    l64a; labs; lcong48; lcong48_r; ldiv; llabs; lldiv; lrand48; lrand48_r;
+
+    # m*
+    mblen; mbrlen; mbrtowc; mbsinit; mbsnrtowcs; mbsrtowcs; mbstowcs;
+    mbtowc; mcheck; mcount; mrand48; mrand48_r;
+
+    # n*
+    nrand48; nrand48_r;
+
+    # o*
+    on_exit;
+
+    # p*
+    putenv;
+
+    # q*
+    qsort;
+
+    # r*
+    rand; rand_r; random; random_r; realpath; rpmatch;
+
+    # s*
+    seed48; seed48_r; setcontext; setenv; setstate; setstate_r; srand; srand48;
+    srand48_r; srandom; srandom_r; step; strfmon; strtod; strtof; strtol;
+    strtold; strtoll; strtoq; strtoul; strtoull; strtouq; system;
+
+    # u*
+    unsetenv;
+
+    # w*
+    wcstombs; wctomb;
+  }
+  GLIBC_2.1 {
+    # a*
+    addseverity;
+
+    # f*
+    fmtmsg;
+
+    # g*
+    getcontext;
+
+    # m*
+    makecontext;
+
+    # s*
+    strtoimax; strtoumax; swapcontext;
+  }
+  GLIBC_2.1.1 {
+    # _*
+    _Exit;
+
+    # i*
+    imaxabs; imaxdiv;
+  }
+  GLIBC_2.1.3 {
+    # used by new G++ ABI
+    __cxa_atexit; __cxa_finalize;
+  }
+  GLIBC_2.3 {
+    # Silent change in SUS.
+    realpath;
+  }
+  GLIBC_2.8 {
+    qsort_r;
+  }
+  GLIBC_2.10 {
+    quick_exit; __cxa_at_quick_exit;
+  }
+  GLIBC_2.13 {
+    __fentry__;
+  }
+  GLIBC_2.17 {
+    secure_getenv;
+  }
+  GLIBC_2.18 {
+    __cxa_thread_atexit_impl;
+  }
+  GLIBC_2.24 {
+    quick_exit;
+  }
+  GLIBC_2.25 {
+    # s*
+    strfromd; strfromf; strfroml;
+    getrandom; getentropy;
+  }
+  GLIBC_PRIVATE {
+    # functions which have an additional interface since they are
+    # are cancelable.
+    __libc_system;
+    # Variable which needs a dynamic symbol table entry.
+    __abort_msg;
+    # Used from other libraries
+    __libc_secure_getenv;
+    __call_tls_dtors;
+    __strtof_nan; __strtod_nan; __strtold_nan;
+  }
+}
diff --git a/REORG.TODO/stdlib/a64l.c b/REORG.TODO/stdlib/a64l.c
new file mode 100644
index 0000000000..55de3129d3
--- /dev/null
+++ b/REORG.TODO/stdlib/a64l.c
@@ -0,0 +1,64 @@
+/* Copyright (C) 1995-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@gnu.org>, August 1995.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <stdlib.h>
+
+#define TABLE_BASE 0x2e
+#define TABLE_SIZE 0x4d
+
+#define XX ((char)0x40)
+
+
+static const char a64l_table[TABLE_SIZE] =
+{
+  /* 0x2e */                                                           0,  1,
+  /* 0x30 */   2,  3,  4,  5,  6,  7,  8,  9, 10, 11, XX, XX, XX, XX, XX, XX,
+  /* 0x40 */  XX, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
+  /* 0x50 */  27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, XX, XX, XX, XX, XX,
+  /* 0x60 */  XX, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
+  /* 0x70 */  53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63
+};
+
+
+long int
+a64l (const char *string)
+{
+  const char *ptr = string;
+  unsigned long int result = 0ul;
+  const char *end = ptr + 6;
+  int shift = 0;
+
+  do
+    {
+      unsigned index;
+      unsigned value;
+
+      index = *ptr - TABLE_BASE;
+      if ((unsigned int) index >= TABLE_SIZE)
+	break;
+      value = (int) a64l_table[index];
+      if (value == (int) XX)
+	break;
+      ++ptr;
+      result |= value << shift;
+      shift += 6;
+    }
+  while (ptr != end);
+
+  return (long int) result;
+}
diff --git a/REORG.TODO/stdlib/abort.c b/REORG.TODO/stdlib/abort.c
new file mode 100644
index 0000000000..19882f3e3d
--- /dev/null
+++ b/REORG.TODO/stdlib/abort.c
@@ -0,0 +1,142 @@
+/* Copyright (C) 1991-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <libc-lock.h>
+#include <signal.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <sigsetops.h>
+
+/* Try to get a machine dependent instruction which will make the
+   program crash.  This is used in case everything else fails.  */
+#include <abort-instr.h>
+#ifndef ABORT_INSTRUCTION
+/* No such instruction is available.  */
+# define ABORT_INSTRUCTION
+#endif
+
+#include <libio/libioP.h>
+#define fflush(s) _IO_flush_all_lockp (0)
+
+/* Exported variable to locate abort message in core files etc.  */
+struct abort_msg_s *__abort_msg __attribute__ ((nocommon));
+libc_hidden_def (__abort_msg)
+
+/* We must avoid to run in circles.  Therefore we remember how far we
+   already got.  */
+static int stage;
+
+/* We should be prepared for multiple threads trying to run abort.  */
+__libc_lock_define_initialized_recursive (static, lock);
+
+
+/* Cause an abnormal program termination with core-dump.  */
+void
+abort (void)
+{
+  struct sigaction act;
+  sigset_t sigs;
+
+  /* First acquire the lock.  */
+  __libc_lock_lock_recursive (lock);
+
+  /* Now it's for sure we are alone.  But recursive calls are possible.  */
+
+  /* Unblock SIGABRT.  */
+  if (stage == 0)
+    {
+      ++stage;
+      __sigemptyset (&sigs);
+      __sigaddset (&sigs, SIGABRT);
+      __sigprocmask (SIG_UNBLOCK, &sigs, 0);
+    }
+
+  /* Flush all streams.  We cannot close them now because the user
+     might have registered a handler for SIGABRT.  */
+  if (stage == 1)
+    {
+      ++stage;
+      fflush (NULL);
+    }
+
+  /* Send signal which possibly calls a user handler.  */
+  if (stage == 2)
+    {
+      /* This stage is special: we must allow repeated calls of
+	 `abort' when a user defined handler for SIGABRT is installed.
+	 This is risky since the `raise' implementation might also
+	 fail but I don't see another possibility.  */
+      int save_stage = stage;
+
+      stage = 0;
+      __libc_lock_unlock_recursive (lock);
+
+      raise (SIGABRT);
+
+      __libc_lock_lock_recursive (lock);
+      stage = save_stage + 1;
+    }
+
+  /* There was a handler installed.  Now remove it.  */
+  if (stage == 3)
+    {
+      ++stage;
+      memset (&act, '\0', sizeof (struct sigaction));
+      act.sa_handler = SIG_DFL;
+      __sigfillset (&act.sa_mask);
+      act.sa_flags = 0;
+      __sigaction (SIGABRT, &act, NULL);
+    }
+
+  /* Now close the streams which also flushes the output the user
+     defined handler might has produced.  */
+  if (stage == 4)
+    {
+      ++stage;
+      __fcloseall ();
+    }
+
+  /* Try again.  */
+  if (stage == 5)
+    {
+      ++stage;
+      raise (SIGABRT);
+    }
+
+  /* Now try to abort using the system specific command.  */
+  if (stage == 6)
+    {
+      ++stage;
+      ABORT_INSTRUCTION;
+    }
+
+  /* If we can't signal ourselves and the abort instruction failed, exit.  */
+  if (stage == 7)
+    {
+      ++stage;
+      _exit (127);
+    }
+
+  /* If even this fails try to use the provided instruction to crash
+     or otherwise make sure we never return.  */
+  while (1)
+    /* Try for ever and ever.  */
+    ABORT_INSTRUCTION;
+}
+libc_hidden_def (abort)
diff --git a/REORG.TODO/stdlib/abs.c b/REORG.TODO/stdlib/abs.c
new file mode 100644
index 0000000000..dad7403658
--- /dev/null
+++ b/REORG.TODO/stdlib/abs.c
@@ -0,0 +1,27 @@
+/* Copyright (C) 1991-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <stdlib.h>
+
+#undef	abs
+
+/* Return the absolute value of I.  */
+int
+abs (int i)
+{
+  return i < 0 ? -i : i;
+}
diff --git a/REORG.TODO/stdlib/add_n.c b/REORG.TODO/stdlib/add_n.c
new file mode 100644
index 0000000000..12ded53c58
--- /dev/null
+++ b/REORG.TODO/stdlib/add_n.c
@@ -0,0 +1,53 @@
+/* mpn_add_n -- Add two limb vectors of equal, non-zero length.
+
+Copyright (C) 1992-2017 Free Software Foundation, Inc.
+
+This file is part of the GNU MP Library.
+
+The GNU MP Library is free software; you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation; either version 2.1 of the License, or (at your
+option) any later version.
+
+The GNU MP 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 Lesser General Public
+License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with the GNU MP Library; see the file COPYING.LIB.  If not, see
+<http://www.gnu.org/licenses/>.  */
+
+#include <gmp.h>
+#include "gmp-impl.h"
+
+mp_limb_t
+mpn_add_n (mp_ptr res_ptr, mp_srcptr s1_ptr, mp_srcptr s2_ptr, mp_size_t size)
+{
+  register mp_limb_t x, y, cy;
+  register mp_size_t j;
+
+  /* The loop counter and index J goes from -SIZE to -1.  This way
+     the loop becomes faster.  */
+  j = -size;
+
+  /* Offset the base pointers to compensate for the negative indices.  */
+  s1_ptr -= j;
+  s2_ptr -= j;
+  res_ptr -= j;
+
+  cy = 0;
+  do
+    {
+      y = s2_ptr[j];
+      x = s1_ptr[j];
+      y += cy;			/* add previous carry to one addend */
+      cy = (y < cy);		/* get out carry from that addition */
+      y = x + y;		/* add other addend */
+      cy = (y < x) + cy;	/* get out carry from that add, combine */
+      res_ptr[j] = y;
+    }
+  while (++j != 0);
+
+  return cy;
+}
diff --git a/REORG.TODO/stdlib/addmul_1.c b/REORG.TODO/stdlib/addmul_1.c
new file mode 100644
index 0000000000..9eaea8ba33
--- /dev/null
+++ b/REORG.TODO/stdlib/addmul_1.c
@@ -0,0 +1,61 @@
+/* mpn_addmul_1 -- multiply the S1_SIZE long limb vector pointed to by S1_PTR
+   by S2_LIMB, add the S1_SIZE least significant limbs of the product to the
+   limb vector pointed to by RES_PTR.  Return the most significant limb of
+   the product, adjusted for carry-out from the addition.
+
+Copyright (C) 1992-2017 Free Software Foundation, Inc.
+
+This file is part of the GNU MP Library.
+
+The GNU MP Library is free software; you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation; either version 2.1 of the License, or (at your
+option) any later version.
+
+The GNU MP 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 Lesser General Public
+License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with the GNU MP Library; see the file COPYING.LIB.  If not, see
+<http://www.gnu.org/licenses/>.  */
+
+#include <gmp.h>
+#include "gmp-impl.h"
+#include "longlong.h"
+
+mp_limb_t
+mpn_addmul_1 (register mp_ptr res_ptr, register mp_srcptr s1_ptr,
+	      mp_size_t s1_size, register mp_limb_t s2_limb)
+{
+  register mp_limb_t cy_limb;
+  register mp_size_t j;
+  register mp_limb_t prod_high, prod_low;
+  register mp_limb_t x;
+
+  /* The loop counter and index J goes from -SIZE to -1.  This way
+     the loop becomes faster.  */
+  j = -s1_size;
+
+  /* Offset the base pointers to compensate for the negative indices.  */
+  res_ptr -= j;
+  s1_ptr -= j;
+
+  cy_limb = 0;
+  do
+    {
+      umul_ppmm (prod_high, prod_low, s1_ptr[j], s2_limb);
+
+      prod_low += cy_limb;
+      cy_limb = (prod_low < cy_limb) + prod_high;
+
+      x = res_ptr[j];
+      prod_low = x + prod_low;
+      cy_limb += (prod_low < x);
+      res_ptr[j] = prod_low;
+    }
+  while (++j != 0);
+
+  return cy_limb;
+}
diff --git a/REORG.TODO/stdlib/alloca.h b/REORG.TODO/stdlib/alloca.h
new file mode 100644
index 0000000000..89a1a90a4f
--- /dev/null
+++ b/REORG.TODO/stdlib/alloca.h
@@ -0,0 +1,40 @@
+/* Copyright (C) 1992-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef	_ALLOCA_H
+#define	_ALLOCA_H	1
+
+#include <features.h>
+
+#define	__need_size_t
+#include <stddef.h>
+
+__BEGIN_DECLS
+
+/* Remove any previous definitions.  */
+#undef	alloca
+
+/* Allocate a block that will be freed when the calling function exits.  */
+extern void *alloca (size_t __size) __THROW;
+
+#ifdef	__GNUC__
+# define alloca(size)	__builtin_alloca (size)
+#endif /* GCC.  */
+
+__END_DECLS
+
+#endif /* alloca.h */
diff --git a/REORG.TODO/stdlib/at_quick_exit.c b/REORG.TODO/stdlib/at_quick_exit.c
new file mode 100644
index 0000000000..3b74d0a688
--- /dev/null
+++ b/REORG.TODO/stdlib/at_quick_exit.c
@@ -0,0 +1,50 @@
+/* Copyright (C) 1991-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   In addition to the permissions in the GNU Lesser General Public
+   License, the Free Software Foundation gives you unlimited
+   permission to link the compiled version of this file with other
+   programs, and to distribute those programs without any restriction
+   coming from the use of this file. (The GNU Lesser General Public
+   License restrictions do apply in other respects; for example, they
+   cover modification of the file, and distribution when not linked
+   into another program.)
+
+   Note that people who make modified versions of this file are not
+   obligated to grant this special exception for their modified
+   versions; it is their choice whether to do so. The GNU Lesser
+   General Public License gives permission to release a modified
+   version without this exception; this exception also makes it
+   possible to release a modified version which carries forward this
+   exception.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <stdlib.h>
+#include "exit.h"
+
+
+/* This is defined by newer gcc version unique for each module.  */
+extern void *__dso_handle __attribute__ ((__weak__));
+
+
+/* Register FUNC to be executed by `quick_exit'.  */
+int
+attribute_hidden
+at_quick_exit (void (*func) (void))
+{
+  return __cxa_at_quick_exit ((void (*) (void *)) func,
+			      &__dso_handle == NULL ? NULL : __dso_handle);
+}
diff --git a/REORG.TODO/stdlib/atexit.c b/REORG.TODO/stdlib/atexit.c
new file mode 100644
index 0000000000..f28b6ba1b7
--- /dev/null
+++ b/REORG.TODO/stdlib/atexit.c
@@ -0,0 +1,52 @@
+/* Copyright (C) 1991-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   In addition to the permissions in the GNU Lesser General Public
+   License, the Free Software Foundation gives you unlimited
+   permission to link the compiled version of this file with other
+   programs, and to distribute those programs without any restriction
+   coming from the use of this file. (The GNU Lesser General Public
+   License restrictions do apply in other respects; for example, they
+   cover modification of the file, and distribution when not linked
+   into another program.)
+
+   Note that people who make modified versions of this file are not
+   obligated to grant this special exception for their modified
+   versions; it is their choice whether to do so. The GNU Lesser
+   General Public License gives permission to release a modified
+   version without this exception; this exception also makes it
+   possible to release a modified version which carries forward this
+   exception.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <stdlib.h>
+#include "exit.h"
+
+
+/* This is defined by newer gcc version unique for each module.  */
+extern void *__dso_handle __attribute__ ((__weak__));
+
+
+/* Register FUNC to be executed by `exit'.  */
+int
+#ifndef atexit
+attribute_hidden
+#endif
+atexit (void (*func) (void))
+{
+  return __cxa_atexit ((void (*) (void *)) func, NULL,
+		       &__dso_handle == NULL ? NULL : __dso_handle);
+}
diff --git a/REORG.TODO/stdlib/atof.c b/REORG.TODO/stdlib/atof.c
new file mode 100644
index 0000000000..a21ce58924
--- /dev/null
+++ b/REORG.TODO/stdlib/atof.c
@@ -0,0 +1,28 @@
+/* Copyright (C) 1991-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <stdlib.h>
+
+#undef	atof
+
+
+/* Convert a string to a double.  */
+double
+atof (const char *nptr)
+{
+  return strtod (nptr, (char **) NULL);
+}
diff --git a/REORG.TODO/stdlib/atoi.c b/REORG.TODO/stdlib/atoi.c
new file mode 100644
index 0000000000..f8593423a6
--- /dev/null
+++ b/REORG.TODO/stdlib/atoi.c
@@ -0,0 +1,28 @@
+/* Copyright (C) 1991-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <stdlib.h>
+
+#undef	atoi
+
+
+/* Convert a string to an int.  */
+int
+atoi (const char *nptr)
+{
+  return (int) strtol (nptr, (char **) NULL, 10);
+}
diff --git a/REORG.TODO/stdlib/atol.c b/REORG.TODO/stdlib/atol.c
new file mode 100644
index 0000000000..8ca34c0803
--- /dev/null
+++ b/REORG.TODO/stdlib/atol.c
@@ -0,0 +1,28 @@
+/* Copyright (C) 1991-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <stdlib.h>
+
+#undef	atol
+
+
+/* Convert a string to a long int.  */
+long int
+atol (const char *nptr)
+{
+  return strtol (nptr, (char **) NULL, 10);
+}
diff --git a/REORG.TODO/stdlib/atoll.c b/REORG.TODO/stdlib/atoll.c
new file mode 100644
index 0000000000..41b36a016e
--- /dev/null
+++ b/REORG.TODO/stdlib/atoll.c
@@ -0,0 +1,28 @@
+/* Copyright (C) 1991-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <stdlib.h>
+
+#undef	atoll
+
+
+/* Convert a string to a long long int.  */
+long long int
+atoll (const char *nptr)
+{
+  return strtoll (nptr, (char **) NULL, 10);
+}
diff --git a/REORG.TODO/stdlib/bits/monetary-ldbl.h b/REORG.TODO/stdlib/bits/monetary-ldbl.h
new file mode 100644
index 0000000000..d042ac5af1
--- /dev/null
+++ b/REORG.TODO/stdlib/bits/monetary-ldbl.h
@@ -0,0 +1,27 @@
+/* -mlong-double-64 compatibility mode for monetary functions.
+   Copyright (C) 2006-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _MONETARY_H
+# error "Never include <bits/monetary-ldbl.h> directly; use <monetary.h> instead."
+#endif
+
+__LDBL_REDIR_DECL (strfmon)
+
+#ifdef __USE_GNU
+__LDBL_REDIR_DECL (strfmon_l)
+#endif
diff --git a/REORG.TODO/stdlib/bits/stdlib-float.h b/REORG.TODO/stdlib/bits/stdlib-float.h
new file mode 100644
index 0000000000..aba8e94596
--- /dev/null
+++ b/REORG.TODO/stdlib/bits/stdlib-float.h
@@ -0,0 +1,29 @@
+/* Floating-point inline functions for stdlib.h.
+   Copyright (C) 2012-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _STDLIB_H
+# error "Never use <bits/stdlib-float.h> directly; include <stdlib.h> instead."
+#endif
+
+#ifdef __USE_EXTERN_INLINES
+__extern_inline double
+__NTH (atof (const char *__nptr))
+{
+  return strtod (__nptr, (char **) NULL);
+}
+#endif /* Optimizing and Inlining.  */
diff --git a/REORG.TODO/stdlib/bits/stdlib-ldbl.h b/REORG.TODO/stdlib/bits/stdlib-ldbl.h
new file mode 100644
index 0000000000..2f568db45a
--- /dev/null
+++ b/REORG.TODO/stdlib/bits/stdlib-ldbl.h
@@ -0,0 +1,41 @@
+/* -mlong-double-64 compatibility mode for <stdlib.h> functions.
+   Copyright (C) 2006-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _STDLIB_H
+# error "Never include <bits/stdlib-ldbl.h> directly; use <stdlib.h> instead."
+#endif
+
+#ifdef	__USE_ISOC99
+__LDBL_REDIR1_DECL (strtold, strtod)
+#endif
+
+#ifdef __USE_GNU
+__LDBL_REDIR1_DECL (strtold_l, strtod_l)
+#endif
+
+#if __GLIBC_USE (IEC_60559_BFP_EXT)
+__LDBL_REDIR1_DECL (strfroml, strfromd)
+#endif
+
+#ifdef __USE_MISC
+__LDBL_REDIR1_DECL (qecvt, ecvt)
+__LDBL_REDIR1_DECL (qfcvt, fcvt)
+__LDBL_REDIR1_DECL (qgcvt, gcvt)
+__LDBL_REDIR1_DECL (qecvt_r, ecvt_r)
+__LDBL_REDIR1_DECL (qfcvt_r, fcvt_r)
+#endif
diff --git a/REORG.TODO/stdlib/bits/stdlib.h b/REORG.TODO/stdlib/bits/stdlib.h
new file mode 100644
index 0000000000..864284fc74
--- /dev/null
+++ b/REORG.TODO/stdlib/bits/stdlib.h
@@ -0,0 +1,155 @@
+/* Checking macros for stdlib functions.
+   Copyright (C) 2005-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _STDLIB_H
+# error "Never include <bits/stdlib.h> directly; use <stdlib.h> instead."
+#endif
+
+extern char *__realpath_chk (const char *__restrict __name,
+			     char *__restrict __resolved,
+			     size_t __resolvedlen) __THROW __wur;
+extern char *__REDIRECT_NTH (__realpath_alias,
+			     (const char *__restrict __name,
+			      char *__restrict __resolved), realpath) __wur;
+extern char *__REDIRECT_NTH (__realpath_chk_warn,
+			     (const char *__restrict __name,
+			      char *__restrict __resolved,
+			      size_t __resolvedlen), __realpath_chk) __wur
+     __warnattr ("second argument of realpath must be either NULL or at "
+		 "least PATH_MAX bytes long buffer");
+
+__fortify_function __wur char *
+__NTH (realpath (const char *__restrict __name, char *__restrict __resolved))
+{
+  if (__bos (__resolved) != (size_t) -1)
+    {
+#if defined _LIBC_LIMITS_H_ && defined PATH_MAX
+      if (__bos (__resolved) < PATH_MAX)
+	return __realpath_chk_warn (__name, __resolved, __bos (__resolved));
+#endif
+      return __realpath_chk (__name, __resolved, __bos (__resolved));
+    }
+
+  return __realpath_alias (__name, __resolved);
+}
+
+
+extern int __ptsname_r_chk (int __fd, char *__buf, size_t __buflen,
+			    size_t __nreal) __THROW __nonnull ((2));
+extern int __REDIRECT_NTH (__ptsname_r_alias, (int __fd, char *__buf,
+					       size_t __buflen), ptsname_r)
+     __nonnull ((2));
+extern int __REDIRECT_NTH (__ptsname_r_chk_warn,
+			   (int __fd, char *__buf, size_t __buflen,
+			    size_t __nreal), __ptsname_r_chk)
+     __nonnull ((2)) __warnattr ("ptsname_r called with buflen bigger than "
+				 "size of buf");
+
+__fortify_function int
+__NTH (ptsname_r (int __fd, char *__buf, size_t __buflen))
+{
+  if (__bos (__buf) != (size_t) -1)
+    {
+      if (!__builtin_constant_p (__buflen))
+	return __ptsname_r_chk (__fd, __buf, __buflen, __bos (__buf));
+      if (__buflen > __bos (__buf))
+	return __ptsname_r_chk_warn (__fd, __buf, __buflen, __bos (__buf));
+    }
+  return __ptsname_r_alias (__fd, __buf, __buflen);
+}
+
+
+extern int __wctomb_chk (char *__s, wchar_t __wchar, size_t __buflen)
+  __THROW __wur;
+extern int __REDIRECT_NTH (__wctomb_alias, (char *__s, wchar_t __wchar),
+			   wctomb) __wur;
+
+__fortify_function __wur int
+__NTH (wctomb (char *__s, wchar_t __wchar))
+{
+  /* We would have to include <limits.h> to get a definition of MB_LEN_MAX.
+     But this would only disturb the namespace.  So we define our own
+     version here.  */
+#define __STDLIB_MB_LEN_MAX	16
+#if defined MB_LEN_MAX && MB_LEN_MAX != __STDLIB_MB_LEN_MAX
+# error "Assumed value of MB_LEN_MAX wrong"
+#endif
+  if (__bos (__s) != (size_t) -1 && __STDLIB_MB_LEN_MAX > __bos (__s))
+    return __wctomb_chk (__s, __wchar, __bos (__s));
+  return __wctomb_alias (__s, __wchar);
+}
+
+
+extern size_t __mbstowcs_chk (wchar_t *__restrict __dst,
+			      const char *__restrict __src,
+			      size_t __len, size_t __dstlen) __THROW;
+extern size_t __REDIRECT_NTH (__mbstowcs_alias,
+			      (wchar_t *__restrict __dst,
+			       const char *__restrict __src,
+			       size_t __len), mbstowcs);
+extern size_t __REDIRECT_NTH (__mbstowcs_chk_warn,
+			      (wchar_t *__restrict __dst,
+			       const char *__restrict __src,
+			       size_t __len, size_t __dstlen), __mbstowcs_chk)
+     __warnattr ("mbstowcs called with dst buffer smaller than len "
+		 "* sizeof (wchar_t)");
+
+__fortify_function size_t
+__NTH (mbstowcs (wchar_t *__restrict __dst, const char *__restrict __src,
+		 size_t __len))
+{
+  if (__bos (__dst) != (size_t) -1)
+    {
+      if (!__builtin_constant_p (__len))
+	return __mbstowcs_chk (__dst, __src, __len,
+			       __bos (__dst) / sizeof (wchar_t));
+
+      if (__len > __bos (__dst) / sizeof (wchar_t))
+	return __mbstowcs_chk_warn (__dst, __src, __len,
+				     __bos (__dst) / sizeof (wchar_t));
+    }
+  return __mbstowcs_alias (__dst, __src, __len);
+}
+
+
+extern size_t __wcstombs_chk (char *__restrict __dst,
+			      const wchar_t *__restrict __src,
+			      size_t __len, size_t __dstlen) __THROW;
+extern size_t __REDIRECT_NTH (__wcstombs_alias,
+			      (char *__restrict __dst,
+			       const wchar_t *__restrict __src,
+			       size_t __len), wcstombs);
+extern size_t __REDIRECT_NTH (__wcstombs_chk_warn,
+			      (char *__restrict __dst,
+			       const wchar_t *__restrict __src,
+			       size_t __len, size_t __dstlen), __wcstombs_chk)
+     __warnattr ("wcstombs called with dst buffer smaller than len");
+
+__fortify_function size_t
+__NTH (wcstombs (char *__restrict __dst, const wchar_t *__restrict __src,
+		 size_t __len))
+{
+  if (__bos (__dst) != (size_t) -1)
+    {
+      if (!__builtin_constant_p (__len))
+	return __wcstombs_chk (__dst, __src, __len, __bos (__dst));
+      if (__len > __bos (__dst))
+	return __wcstombs_chk_warn (__dst, __src, __len, __bos (__dst));
+    }
+  return __wcstombs_alias (__dst, __src, __len);
+}
diff --git a/REORG.TODO/stdlib/bsearch.c b/REORG.TODO/stdlib/bsearch.c
new file mode 100644
index 0000000000..e6aa407491
--- /dev/null
+++ b/REORG.TODO/stdlib/bsearch.c
@@ -0,0 +1,23 @@
+/* Copyright (C) 1991-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <stdlib.h>
+
+#undef  __extern_inline
+#define __extern_inline /* Empty, so we get a normal definition.  */
+#include <bits/stdlib-bsearch.h>
+libc_hidden_def (bsearch)
diff --git a/REORG.TODO/stdlib/bug-fmtmsg1.c b/REORG.TODO/stdlib/bug-fmtmsg1.c
new file mode 100644
index 0000000000..04bfaea3ce
--- /dev/null
+++ b/REORG.TODO/stdlib/bug-fmtmsg1.c
@@ -0,0 +1,28 @@
+#include <fmtmsg.h>
+#include <stdio.h>
+
+
+static int
+do_test (void)
+{
+  /* Ugly, but fmtmsg would otherwise print to stderr which we do not
+     want.  */
+  fclose (stderr);
+  stderr = stdout;
+
+  int e1;
+  e1 = fmtmsg (MM_PRINT, "label:part", MM_WARNING, "text", "action", "tag");
+
+  int e2;
+  e2 = fmtmsg (MM_PRINT, "label2:part2", 11, "text2", "action2", "tag2");
+
+  addseverity (10, "additional severity");
+
+  int e3;
+  e3 = fmtmsg (MM_PRINT, "label3:part3", 10, "text3", "action3", "tag3");
+
+  return e1 != 0 || e2 != 0 || e3 != 0;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/bug-getcontext.c b/REORG.TODO/stdlib/bug-getcontext.c
new file mode 100644
index 0000000000..163400acba
--- /dev/null
+++ b/REORG.TODO/stdlib/bug-getcontext.c
@@ -0,0 +1,76 @@
+/* BZ 12420 */
+
+#include <errno.h>
+#include <fenv.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <ucontext.h>
+#include <libc-diag.h>
+
+static int
+do_test (void)
+{
+  if (FE_ALL_EXCEPT == 0)
+    {
+      printf("Skipping test; no support for FP exceptions.\n");
+      return 0;
+    }
+
+  int except_mask = 0;
+#ifdef FE_DIVBYZERO
+  except_mask |= FE_DIVBYZERO;
+#endif
+#ifdef FE_INVALID
+  except_mask |= FE_INVALID;
+#endif
+#ifdef FE_OVERFLOW
+  except_mask |= FE_OVERFLOW;
+#endif
+#ifdef FE_UNDERFLOW
+  except_mask |= FE_UNDERFLOW;
+#endif
+  int status = feenableexcept (except_mask);
+
+  except_mask = fegetexcept ();
+  if (except_mask == -1)
+    {
+      printf("\nBefore getcontext(): fegetexcept returned: %d\n",
+	     except_mask);
+      return 1;
+    }
+
+  ucontext_t ctx;
+  status = getcontext(&ctx);
+  if (status)
+    {
+      printf("\ngetcontext failed, errno: %d.\n", errno);
+      return 1;
+    }
+
+  printf ("\nDone with getcontext()!\n");
+  fflush (NULL);
+
+  /* On nios2 and tilepro, GCC 5 warns that except_mask may be used
+     uninitialized.  Because it is always initialized and nothing in
+     this test ever calls setcontext (a setcontext call could result
+     in local variables being clobbered on the second return from
+     getcontext), in fact an uninitialized use is not possible.  */
+  DIAG_PUSH_NEEDS_COMMENT;
+  DIAG_IGNORE_NEEDS_COMMENT (5, "-Wmaybe-uninitialized");
+  int mask = fegetexcept ();
+  if (mask != except_mask)
+    {
+      printf("\nAfter getcontext(): fegetexcept returned: %d, expected: %d.\n",
+	     mask, except_mask);
+      return 1;
+    }
+
+  printf("\nAt end fegetexcept() returned %d, expected: %d.\n",
+	 mask, except_mask);
+  DIAG_POP_NEEDS_COMMENT;
+
+  return 0;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/bug-strtod.c b/REORG.TODO/stdlib/bug-strtod.c
new file mode 100644
index 0000000000..b91f739104
--- /dev/null
+++ b/REORG.TODO/stdlib/bug-strtod.c
@@ -0,0 +1,67 @@
+/* Test to strtod etc for numbers like x000...0000.000e-nn.
+   This file is part of the GNU C Library.
+   Copyright (C) 2001-2017 Free Software Foundation, Inc.
+   Contributed by Ulrich Drepper <drepper@redhat.com>, 2001.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "tst-strtod.h"
+
+#define TEST_STRTOD(FSUF, FTYPE, FTOSTR, LSUF, CSUF)			\
+static int								\
+test_strto ## FSUF (void)						\
+{									\
+  char buf[300];							\
+  int cnt;								\
+  int result = 0;							\
+									\
+  for (cnt = 0; cnt < 200; ++cnt)					\
+    {									\
+      ssize_t n;							\
+      FTYPE f;								\
+									\
+      n = sprintf (buf, "%d", cnt);					\
+      memset (buf + n, '0', cnt);					\
+      sprintf (buf + n + cnt, ".000e-%d", cnt);				\
+      f = strto ## FSUF (buf, NULL);					\
+									\
+      if (f != (FTYPE) cnt)						\
+	{								\
+	  char fstr[FSTRLENMAX];					\
+	  char fcntstr[FSTRLENMAX];					\
+	  FTOSTR (fstr, sizeof (fstr), "%g", f);			\
+	  FTOSTR (fcntstr, sizeof (fstr), "%g", (FTYPE) cnt); 		\
+	  printf ("strto" #FSUF "(\"%s\") "				\
+		  "failed for cnt == %d (%s instead of %s)\n",		\
+		  buf, cnt, fstr, fcntstr);				\
+	  result = 1;							\
+	}								\
+      else								\
+	printf ( "strto" #FSUF "() fine for cnt == %d\n", cnt);		\
+    }									\
+  return result;							\
+}
+
+GEN_TEST_STRTOD_FOREACH (TEST_STRTOD)
+
+int
+main (void)
+{
+  return STRTOD_TEST_FOREACH (test_strto);
+}
diff --git a/REORG.TODO/stdlib/bug-strtod2.c b/REORG.TODO/stdlib/bug-strtod2.c
new file mode 100644
index 0000000000..6128f2dd56
--- /dev/null
+++ b/REORG.TODO/stdlib/bug-strtod2.c
@@ -0,0 +1,57 @@
+#include <locale.h>
+#include <math.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "tst-strtod.h"
+
+static const char *tests[] =
+  {
+    "inf", "Inf", "iNf", "inF", "INf", "iNF", "INF", "InF",
+    "infinity", "Infinity", "InfInity", "INFINITY"
+  };
+#define ntests (sizeof (tests) / sizeof (tests[0]))
+
+#define TEST_STRTOD(FSUF, FTYPE, FTOSTR, LSUF, CSUF)			\
+static int								\
+test_strto ## FSUF (void)						\
+{									\
+  int res = 0;								\
+  for (int i = 0; i < ntests; ++i)					\
+    {									\
+      char *endp;							\
+      FTYPE d = strto ## FSUF (tests[i], &endp);			\
+      if (*endp != '\0')						\
+	{								\
+	  printf ("did not consume all of '%s'\n", tests[i]);		\
+	  res = 1;							\
+	}								\
+      if (!isinf (d))							\
+	{								\
+	  printf ("'%s' does not pass isinf\n", tests[i]);		\
+	  res = 1;							\
+	}								\
+    }									\
+									\
+  return res;								\
+}
+
+GEN_TEST_STRTOD_FOREACH (TEST_STRTOD)
+
+static int
+do_test (void)
+{
+  /* The Turkish locale is notorious because tolower() maps 'I' to the
+     dotless lowercase 'i' and toupper() maps 'i' to an 'I' with a dot
+     above.  */
+  if (setlocale (LC_ALL, "tr_TR.UTF-8") == NULL)
+    {
+      puts ("cannot set locale");
+      return 0;
+    }
+
+  return STRTOD_TEST_FOREACH (test_strto);
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/canonicalize.c b/REORG.TODO/stdlib/canonicalize.c
new file mode 100644
index 0000000000..c3d892c862
--- /dev/null
+++ b/REORG.TODO/stdlib/canonicalize.c
@@ -0,0 +1,246 @@
+/* Return the canonical absolute name of a given file.
+   Copyright (C) 1996-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <assert.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <limits.h>
+#include <sys/stat.h>
+#include <errno.h>
+#include <stddef.h>
+
+#include <eloop-threshold.h>
+#include <shlib-compat.h>
+
+/* Return the canonical absolute name of file NAME.  A canonical name
+   does not contain any `.', `..' components nor any repeated path
+   separators ('/') or symlinks.  All path components must exist.  If
+   RESOLVED is null, the result is malloc'd; otherwise, if the
+   canonical name is PATH_MAX chars or more, returns null with `errno'
+   set to ENAMETOOLONG; if the name fits in fewer than PATH_MAX chars,
+   returns the name in RESOLVED.  If the name cannot be resolved and
+   RESOLVED is non-NULL, it contains the path of the first component
+   that cannot be resolved.  If the path can be resolved, RESOLVED
+   holds the same value as the value returned.  */
+
+char *
+__realpath (const char *name, char *resolved)
+{
+  char *rpath, *dest, *extra_buf = NULL;
+  const char *start, *end, *rpath_limit;
+  long int path_max;
+  int num_links = 0;
+
+  if (name == NULL)
+    {
+      /* As per Single Unix Specification V2 we must return an error if
+	 either parameter is a null pointer.  We extend this to allow
+	 the RESOLVED parameter to be NULL in case the we are expected to
+	 allocate the room for the return value.  */
+      __set_errno (EINVAL);
+      return NULL;
+    }
+
+  if (name[0] == '\0')
+    {
+      /* As per Single Unix Specification V2 we must return an error if
+	 the name argument points to an empty string.  */
+      __set_errno (ENOENT);
+      return NULL;
+    }
+
+#ifdef PATH_MAX
+  path_max = PATH_MAX;
+#else
+  path_max = pathconf (name, _PC_PATH_MAX);
+  if (path_max <= 0)
+    path_max = 1024;
+#endif
+
+  if (resolved == NULL)
+    {
+      rpath = malloc (path_max);
+      if (rpath == NULL)
+	return NULL;
+    }
+  else
+    rpath = resolved;
+  rpath_limit = rpath + path_max;
+
+  if (name[0] != '/')
+    {
+      if (!__getcwd (rpath, path_max))
+	{
+	  rpath[0] = '\0';
+	  goto error;
+	}
+      dest = __rawmemchr (rpath, '\0');
+    }
+  else
+    {
+      rpath[0] = '/';
+      dest = rpath + 1;
+    }
+
+  for (start = end = name; *start; start = end)
+    {
+      struct stat64 st;
+      int n;
+
+      /* Skip sequence of multiple path-separators.  */
+      while (*start == '/')
+	++start;
+
+      /* Find end of path component.  */
+      for (end = start; *end && *end != '/'; ++end)
+	/* Nothing.  */;
+
+      if (end - start == 0)
+	break;
+      else if (end - start == 1 && start[0] == '.')
+	/* nothing */;
+      else if (end - start == 2 && start[0] == '.' && start[1] == '.')
+	{
+	  /* Back up to previous component, ignore if at root already.  */
+	  if (dest > rpath + 1)
+	    while ((--dest)[-1] != '/');
+	}
+      else
+	{
+	  size_t new_size;
+
+	  if (dest[-1] != '/')
+	    *dest++ = '/';
+
+	  if (dest + (end - start) >= rpath_limit)
+	    {
+	      ptrdiff_t dest_offset = dest - rpath;
+	      char *new_rpath;
+
+	      if (resolved)
+		{
+		  __set_errno (ENAMETOOLONG);
+		  if (dest > rpath + 1)
+		    dest--;
+		  *dest = '\0';
+		  goto error;
+		}
+	      new_size = rpath_limit - rpath;
+	      if (end - start + 1 > path_max)
+		new_size += end - start + 1;
+	      else
+		new_size += path_max;
+	      new_rpath = (char *) realloc (rpath, new_size);
+	      if (new_rpath == NULL)
+		goto error;
+	      rpath = new_rpath;
+	      rpath_limit = rpath + new_size;
+
+	      dest = rpath + dest_offset;
+	    }
+
+	  dest = __mempcpy (dest, start, end - start);
+	  *dest = '\0';
+
+	  if (__lxstat64 (_STAT_VER, rpath, &st) < 0)
+	    goto error;
+
+	  if (S_ISLNK (st.st_mode))
+	    {
+	      char *buf = __alloca (path_max);
+	      size_t len;
+
+	      if (++num_links > __eloop_threshold ())
+		{
+		  __set_errno (ELOOP);
+		  goto error;
+		}
+
+	      n = __readlink (rpath, buf, path_max - 1);
+	      if (n < 0)
+		goto error;
+	      buf[n] = '\0';
+
+	      if (!extra_buf)
+		extra_buf = __alloca (path_max);
+
+	      len = strlen (end);
+	      if ((long int) (n + len) >= path_max)
+		{
+		  __set_errno (ENAMETOOLONG);
+		  goto error;
+		}
+
+	      /* Careful here, end may be a pointer into extra_buf... */
+	      memmove (&extra_buf[n], end, len + 1);
+	      name = end = memcpy (extra_buf, buf, n);
+
+	      if (buf[0] == '/')
+		dest = rpath + 1;	/* It's an absolute symlink */
+	      else
+		/* Back up to previous component, ignore if at root already: */
+		if (dest > rpath + 1)
+		  while ((--dest)[-1] != '/');
+	    }
+	  else if (!S_ISDIR (st.st_mode) && *end != '\0')
+	    {
+	      __set_errno (ENOTDIR);
+	      goto error;
+	    }
+	}
+    }
+  if (dest > rpath + 1 && dest[-1] == '/')
+    --dest;
+  *dest = '\0';
+
+  assert (resolved == NULL || resolved == rpath);
+  return rpath;
+
+error:
+  assert (resolved == NULL || resolved == rpath);
+  if (resolved == NULL)
+    free (rpath);
+  return NULL;
+}
+versioned_symbol (libc, __realpath, realpath, GLIBC_2_3);
+
+
+#if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_3)
+char *
+attribute_compat_text_section
+__old_realpath (const char *name, char *resolved)
+{
+  if (resolved == NULL)
+    {
+      __set_errno (EINVAL);
+      return NULL;
+    }
+
+  return __realpath (name, resolved);
+}
+compat_symbol (libc, __old_realpath, realpath, GLIBC_2_0);
+#endif
+
+
+char *
+__canonicalize_file_name (const char *name)
+{
+  return __realpath (name, NULL);
+}
+weak_alias (__canonicalize_file_name, canonicalize_file_name)
diff --git a/REORG.TODO/stdlib/cmp.c b/REORG.TODO/stdlib/cmp.c
new file mode 100644
index 0000000000..1480a9b165
--- /dev/null
+++ b/REORG.TODO/stdlib/cmp.c
@@ -0,0 +1,48 @@
+/* mpn_cmp -- Compare two low-level natural-number integers.
+
+Copyright (C) 1991-2017 Free Software Foundation, Inc.
+
+This file is part of the GNU MP Library.
+
+The GNU MP Library is free software; you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation; either version 2.1 of the License, or (at your
+option) any later version.
+
+The GNU MP 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 Lesser General Public
+License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with the GNU MP Library; see the file COPYING.LIB.  If not, see
+<http://www.gnu.org/licenses/>.  */
+
+#include <gmp.h>
+#include "gmp-impl.h"
+
+/* Compare OP1_PTR/OP1_SIZE with OP2_PTR/OP2_SIZE.
+   There are no restrictions on the relative sizes of
+   the two arguments.
+   Return 1 if OP1 > OP2, 0 if they are equal, and -1 if OP1 < OP2.  */
+
+int
+mpn_cmp (mp_srcptr op1_ptr, mp_srcptr op2_ptr, mp_size_t size)
+{
+  mp_size_t i;
+  mp_limb_t op1_word, op2_word;
+
+  for (i = size - 1; i >= 0; i--)
+    {
+      op1_word = op1_ptr[i];
+      op2_word = op2_ptr[i];
+      if (op1_word != op2_word)
+	goto diff;
+    }
+  return 0;
+ diff:
+  /* This can *not* be simplified to
+	op2_word - op2_word
+     since that expression might give signed overflow.  */
+  return (op1_word > op2_word) ? 1 : -1;
+}
diff --git a/REORG.TODO/stdlib/cxa_at_quick_exit.c b/REORG.TODO/stdlib/cxa_at_quick_exit.c
new file mode 100644
index 0000000000..ebebaf4bd7
--- /dev/null
+++ b/REORG.TODO/stdlib/cxa_at_quick_exit.c
@@ -0,0 +1,30 @@
+/* Copyright (C) 2009-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <stdlib.h>
+#include "exit.h"
+
+
+static struct exit_function_list initial_quick;
+struct exit_function_list *__quick_exit_funcs = &initial_quick;
+
+/* Register a function to be called by quick_exit.  */
+int
+__cxa_at_quick_exit (void (*func) (void *), void *d)
+{
+  return __internal_atexit (func, NULL, d, &__quick_exit_funcs);
+}
diff --git a/REORG.TODO/stdlib/cxa_atexit.c b/REORG.TODO/stdlib/cxa_atexit.c
new file mode 100644
index 0000000000..ce5d9f22b4
--- /dev/null
+++ b/REORG.TODO/stdlib/cxa_atexit.c
@@ -0,0 +1,133 @@
+/* Copyright (C) 1999-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <assert.h>
+#include <stdlib.h>
+#include <stdint.h>
+
+#include <libc-lock.h>
+#include "exit.h"
+#include <atomic.h>
+#include <sysdep.h>
+
+#undef __cxa_atexit
+
+
+int
+attribute_hidden
+__internal_atexit (void (*func) (void *), void *arg, void *d,
+		   struct exit_function_list **listp)
+{
+  struct exit_function *new = __new_exitfn (listp);
+
+  if (new == NULL)
+    return -1;
+
+#ifdef PTR_MANGLE
+  PTR_MANGLE (func);
+#endif
+  new->func.cxa.fn = (void (*) (void *, int)) func;
+  new->func.cxa.arg = arg;
+  new->func.cxa.dso_handle = d;
+  atomic_write_barrier ();
+  new->flavor = ef_cxa;
+  return 0;
+}
+
+
+/* Register a function to be called by exit or when a shared library
+   is unloaded.  This function is only called from code generated by
+   the C++ compiler.  */
+int
+__cxa_atexit (void (*func) (void *), void *arg, void *d)
+{
+  return __internal_atexit (func, arg, d, &__exit_funcs);
+}
+libc_hidden_def (__cxa_atexit)
+
+
+/* We change global data, so we need locking.  */
+__libc_lock_define_initialized (static, lock)
+
+
+static struct exit_function_list initial;
+struct exit_function_list *__exit_funcs = &initial;
+uint64_t __new_exitfn_called;
+
+struct exit_function *
+__new_exitfn (struct exit_function_list **listp)
+{
+  struct exit_function_list *p = NULL;
+  struct exit_function_list *l;
+  struct exit_function *r = NULL;
+  size_t i = 0;
+
+  __libc_lock_lock (lock);
+
+  for (l = *listp; l != NULL; p = l, l = l->next)
+    {
+      for (i = l->idx; i > 0; --i)
+	if (l->fns[i - 1].flavor != ef_free)
+	  break;
+
+      if (i > 0)
+	break;
+
+      /* This block is completely unused.  */
+      l->idx = 0;
+    }
+
+  if (l == NULL || i == sizeof (l->fns) / sizeof (l->fns[0]))
+    {
+      /* The last entry in a block is used.  Use the first entry in
+	 the previous block if it exists.  Otherwise create a new one.  */
+      if (p == NULL)
+	{
+	  assert (l != NULL);
+	  p = (struct exit_function_list *)
+	    calloc (1, sizeof (struct exit_function_list));
+	  if (p != NULL)
+	    {
+	      p->next = *listp;
+	      *listp = p;
+	    }
+	}
+
+      if (p != NULL)
+	{
+	  r = &p->fns[0];
+	  p->idx = 1;
+	}
+    }
+  else
+    {
+      /* There is more room in the block.  */
+      r = &l->fns[i];
+      l->idx = i + 1;
+    }
+
+  /* Mark entry as used, but we don't know the flavor now.  */
+  if (r != NULL)
+    {
+      r->flavor = ef_us;
+      ++__new_exitfn_called;
+    }
+
+  __libc_lock_unlock (lock);
+
+  return r;
+}
diff --git a/REORG.TODO/stdlib/cxa_finalize.c b/REORG.TODO/stdlib/cxa_finalize.c
new file mode 100644
index 0000000000..aa0a70cb58
--- /dev/null
+++ b/REORG.TODO/stdlib/cxa_finalize.c
@@ -0,0 +1,82 @@
+/* Copyright (C) 1999-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <assert.h>
+#include <stdlib.h>
+#include <atomic.h>
+#include "exit.h"
+#include <fork.h>
+#include <sysdep.h>
+#include <stdint.h>
+
+/* If D is non-NULL, call all functions registered with `__cxa_atexit'
+   with the same dso handle.  Otherwise, if D is NULL, call all of the
+   registered handlers.  */
+void
+__cxa_finalize (void *d)
+{
+  struct exit_function_list *funcs;
+
+ restart:
+  for (funcs = __exit_funcs; funcs; funcs = funcs->next)
+    {
+      struct exit_function *f;
+
+      for (f = &funcs->fns[funcs->idx - 1]; f >= &funcs->fns[0]; --f)
+	{
+	  void (*cxafn) (void *arg, int status);
+	  void *cxaarg;
+
+	  if ((d == NULL || d == f->func.cxa.dso_handle)
+	      /* We don't want to run this cleanup more than once.  */
+	      && (cxafn = f->func.cxa.fn,
+		  cxaarg = f->func.cxa.arg,
+		  ! catomic_compare_and_exchange_bool_acq (&f->flavor, ef_free,
+							   ef_cxa)))
+	    {
+	      uint64_t check = __new_exitfn_called;
+
+#ifdef PTR_DEMANGLE
+	      PTR_DEMANGLE (cxafn);
+#endif
+	      cxafn (cxaarg, 0);
+
+	      /* It is possible that that last exit function registered
+		 more exit functions.  Start the loop over.  */
+	      if (__glibc_unlikely (check != __new_exitfn_called))
+		goto restart;
+	    }
+	}
+    }
+
+  /* Also remove the quick_exit handlers, but do not call them.  */
+  for (funcs = __quick_exit_funcs; funcs; funcs = funcs->next)
+    {
+      struct exit_function *f;
+
+      for (f = &funcs->fns[funcs->idx - 1]; f >= &funcs->fns[0]; --f)
+	if (d == NULL || d == f->func.cxa.dso_handle)
+	  f->flavor = ef_free;
+    }
+
+  /* Remove the registered fork handlers.  We do not have to
+     unregister anything if the program is going to terminate anyway.  */
+#ifdef UNREGISTER_ATFORK
+  if (d != NULL)
+    UNREGISTER_ATFORK (d);
+#endif
+}
diff --git a/REORG.TODO/stdlib/cxa_thread_atexit_impl.c b/REORG.TODO/stdlib/cxa_thread_atexit_impl.c
new file mode 100644
index 0000000000..f9942255a3
--- /dev/null
+++ b/REORG.TODO/stdlib/cxa_thread_atexit_impl.c
@@ -0,0 +1,165 @@
+/* Register destructors for C++ TLS variables declared with thread_local.
+   Copyright (C) 2013-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* CONCURRENCY NOTES:
+
+   This documents concurrency for the non-POD TLS destructor registration,
+   calling and destruction.  The functions __cxa_thread_atexit_impl,
+   _dl_close_worker and __call_tls_dtors are the three main routines that may
+   run concurrently and access shared data.  The shared data in all possible
+   combinations of all three functions are the link map list, a link map for a
+   DSO and the link map member l_tls_dtor_count.
+
+   __cxa_thread_atexit_impl acquires the dl_load_lock before accessing any
+   shared state and hence multiple of its instances can safely execute
+   concurrently.
+
+   _dl_close_worker acquires the dl_load_lock before accessing any shared state
+   as well and hence can concurrently execute multiple of its own instances as
+   well as those of __cxa_thread_atexit_impl safely.  Not all accesses to
+   l_tls_dtor_count are protected by the dl_load_lock, so we need to
+   synchronize using atomics.
+
+   __call_tls_dtors accesses the l_tls_dtor_count without taking the lock; it
+   decrements the value by one.  It does not need the big lock because it does
+   not access any other shared state except for the current DSO link map and
+   its member l_tls_dtor_count.
+
+   Correspondingly, _dl_close_worker loads l_tls_dtor_count and if it is zero,
+   unloads the DSO, thus deallocating the current link map.  This is the goal
+   of maintaining l_tls_dtor_count - to unload the DSO and free resources if
+   there are no pending destructors to be called.
+
+   We want to eliminate the inconsistent state where the DSO is unloaded in
+   _dl_close_worker before it is used in __call_tls_dtors.  This could happen
+   if __call_tls_dtors uses the link map after it sets l_tls_dtor_count to 0,
+   since _dl_close_worker will conclude from the 0 l_tls_dtor_count value that
+   it is safe to unload the DSO.  Hence, to ensure that this does not happen,
+   the following conditions must be met:
+
+   1. In _dl_close_worker, the l_tls_dtor_count load happens before the DSO is
+      unloaded and its link map is freed
+   2. The link map dereference in __call_tls_dtors happens before the
+      l_tls_dtor_count dereference.
+
+   To ensure this, the l_tls_dtor_count decrement in __call_tls_dtors should
+   have release semantics and the load in _dl_close_worker should have acquire
+   semantics.
+
+   Concurrent executions of __call_tls_dtors should only ensure that the value
+   is accessed atomically; no reordering constraints need to be considered.
+   Likewise for the increment of l_tls_dtor_count in __cxa_thread_atexit_impl.
+
+   There is still a possibility on concurrent execution of _dl_close_worker and
+   __call_tls_dtors where _dl_close_worker reads the value of l_tls_dtor_count
+   as 1, __call_tls_dtors decrements the value of l_tls_dtor_count but
+   _dl_close_worker does not unload the DSO, having read the old value.  This
+   is not very different from a case where __call_tls_dtors is called after
+   _dl_close_worker on the DSO and hence is an accepted execution.  */
+
+#include <stdlib.h>
+#include <ldsodefs.h>
+
+typedef void (*dtor_func) (void *);
+
+struct dtor_list
+{
+  dtor_func func;
+  void *obj;
+  struct link_map *map;
+  struct dtor_list *next;
+};
+
+static __thread struct dtor_list *tls_dtor_list;
+static __thread void *dso_symbol_cache;
+static __thread struct link_map *lm_cache;
+
+/* Register a destructor for TLS variables declared with the 'thread_local'
+   keyword.  This function is only called from code generated by the C++
+   compiler.  FUNC is the destructor function and OBJ is the object to be
+   passed to the destructor.  DSO_SYMBOL is the __dso_handle symbol that each
+   DSO has at a unique address in its map, added from crtbegin.o during the
+   linking phase.  */
+int
+__cxa_thread_atexit_impl (dtor_func func, void *obj, void *dso_symbol)
+{
+#ifdef PTR_MANGLE
+  PTR_MANGLE (func);
+#endif
+
+  /* Prepend.  */
+  struct dtor_list *new = calloc (1, sizeof (struct dtor_list));
+  new->func = func;
+  new->obj = obj;
+  new->next = tls_dtor_list;
+  tls_dtor_list = new;
+
+  /* We have to acquire the big lock to prevent a racing dlclose from pulling
+     our DSO from underneath us while we're setting up our destructor.  */
+  __rtld_lock_lock_recursive (GL(dl_load_lock));
+
+  /* See if we already encountered the DSO.  */
+  if (__glibc_unlikely (dso_symbol_cache != dso_symbol))
+    {
+      ElfW(Addr) caller = (ElfW(Addr)) dso_symbol;
+
+      struct link_map *l = _dl_find_dso_for_object (caller);
+
+      /* If the address is not recognized the call comes from the main
+	 program (we hope).  */
+      lm_cache = l ? l : GL(dl_ns)[LM_ID_BASE]._ns_loaded;
+    }
+
+  /* This increment may only be concurrently observed either by the decrement
+     in __call_tls_dtors since the other l_tls_dtor_count access in
+     _dl_close_worker is protected by the dl_load_lock.  The execution in
+     __call_tls_dtors does not really depend on this value beyond the fact that
+     it should be atomic, so Relaxed MO should be sufficient.  */
+  atomic_fetch_add_relaxed (&lm_cache->l_tls_dtor_count, 1);
+  __rtld_lock_unlock_recursive (GL(dl_load_lock));
+
+  new->map = lm_cache;
+
+  return 0;
+}
+
+/* Call the destructors.  This is called either when a thread returns from the
+   initial function or when the process exits via the exit function.  */
+void
+__call_tls_dtors (void)
+{
+  while (tls_dtor_list)
+    {
+      struct dtor_list *cur = tls_dtor_list;
+      dtor_func func = cur->func;
+#ifdef PTR_DEMANGLE
+      PTR_DEMANGLE (func);
+#endif
+
+      tls_dtor_list = tls_dtor_list->next;
+      func (cur->obj);
+
+      /* Ensure that the MAP dereference happens before
+	 l_tls_dtor_count decrement.  That way, we protect this access from a
+	 potential DSO unload in _dl_close_worker, which happens when
+	 l_tls_dtor_count is 0.  See CONCURRENCY NOTES for more detail.  */
+      atomic_fetch_add_release (&cur->map->l_tls_dtor_count, -1);
+      free (cur);
+    }
+}
+libc_hidden_def (__call_tls_dtors)
diff --git a/REORG.TODO/stdlib/dbl2mpn.c b/REORG.TODO/stdlib/dbl2mpn.c
new file mode 100644
index 0000000000..3872db5c41
--- /dev/null
+++ b/REORG.TODO/stdlib/dbl2mpn.c
@@ -0,0 +1,31 @@
+/* Copyright (C) 1993-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <gmp.h>
+#include "gmp-impl.h"
+
+/* Convert a `double' to a multi-precision integer representing the
+   significand scaled up by the highest possible number of significant bits
+   of fraction (DBL_MANT_DIG), and an integral power of two (MPN frexp). */
+
+mp_size_t
+__mpn_extract_double (mp_ptr res_ptr, mp_size_t size,
+		      int *expt, int *is_neg,
+		      double value)
+{
+#error "__mpn_extract_double is not implemented for this floating point format"
+}
diff --git a/REORG.TODO/stdlib/div.c b/REORG.TODO/stdlib/div.c
new file mode 100644
index 0000000000..d525afa1ac
--- /dev/null
+++ b/REORG.TODO/stdlib/div.c
@@ -0,0 +1,62 @@
+/* Copyright (C) 1992-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ * Copyright (c) 1990 Regents of the University of California.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to Berkeley by
+ * Chris Torek.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <stdlib.h>
+
+/* Return the `div_t' representation of NUMER over DENOM.  */
+div_t
+div (int numer, int denom)
+{
+  div_t result;
+
+  result.quot = numer / denom;
+  result.rem = numer % denom;
+
+  return result;
+}
diff --git a/REORG.TODO/stdlib/divmod_1.c b/REORG.TODO/stdlib/divmod_1.c
new file mode 100644
index 0000000000..1ef15d6a1e
--- /dev/null
+++ b/REORG.TODO/stdlib/divmod_1.c
@@ -0,0 +1,199 @@
+/* mpn_divmod_1(quot_ptr, dividend_ptr, dividend_size, divisor_limb) --
+   Divide (DIVIDEND_PTR,,DIVIDEND_SIZE) by DIVISOR_LIMB.
+   Write DIVIDEND_SIZE limbs of quotient at QUOT_PTR.
+   Return the single-limb remainder.
+   There are no constraints on the value of the divisor.
+
+   QUOT_PTR and DIVIDEND_PTR might point to the same limb.
+
+Copyright (C) 1991-2017 Free Software Foundation, Inc.
+
+This file is part of the GNU MP Library.
+
+The GNU MP Library is free software; you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation; either version 2.1 of the License, or (at your
+option) any later version.
+
+The GNU MP 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 Lesser General Public
+License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with the GNU MP Library; see the file COPYING.LIB.  If not, see
+<http://www.gnu.org/licenses/>.  */
+
+#include <gmp.h>
+#include "gmp-impl.h"
+#include "longlong.h"
+
+#ifndef UMUL_TIME
+#define UMUL_TIME 1
+#endif
+
+#ifndef UDIV_TIME
+#define UDIV_TIME UMUL_TIME
+#endif
+
+/* FIXME: We should be using invert_limb (or invert_normalized_limb)
+   here (not udiv_qrnnd).  */
+
+mp_limb_t
+mpn_divmod_1 (mp_ptr quot_ptr,
+	      mp_srcptr dividend_ptr, mp_size_t dividend_size,
+	      mp_limb_t divisor_limb)
+{
+  mp_size_t i;
+  mp_limb_t n1, n0, r;
+  mp_limb_t dummy __attribute__ ((unused));
+
+  /* ??? Should this be handled at all?  Rely on callers?  */
+  if (dividend_size == 0)
+    return 0;
+
+  /* If multiplication is much faster than division, and the
+     dividend is large, pre-invert the divisor, and use
+     only multiplications in the inner loop.  */
+
+  /* This test should be read:
+       Does it ever help to use udiv_qrnnd_preinv?
+	 && Does what we save compensate for the inversion overhead?  */
+  if (UDIV_TIME > (2 * UMUL_TIME + 6)
+      && (UDIV_TIME - (2 * UMUL_TIME + 6)) * dividend_size > UDIV_TIME)
+    {
+      int normalization_steps;
+
+      count_leading_zeros (normalization_steps, divisor_limb);
+      if (normalization_steps != 0)
+	{
+	  mp_limb_t divisor_limb_inverted;
+
+	  divisor_limb <<= normalization_steps;
+
+	  /* Compute (2**2N - 2**N * DIVISOR_LIMB) / DIVISOR_LIMB.  The
+	     result is a (N+1)-bit approximation to 1/DIVISOR_LIMB, with the
+	     most significant bit (with weight 2**N) implicit.  */
+
+	  /* Special case for DIVISOR_LIMB == 100...000.  */
+	  if (divisor_limb << 1 == 0)
+	    divisor_limb_inverted = ~(mp_limb_t) 0;
+	  else
+	    udiv_qrnnd (divisor_limb_inverted, dummy,
+			-divisor_limb, 0, divisor_limb);
+
+	  n1 = dividend_ptr[dividend_size - 1];
+	  r = n1 >> (BITS_PER_MP_LIMB - normalization_steps);
+
+	  /* Possible optimization:
+	     if (r == 0
+	     && divisor_limb > ((n1 << normalization_steps)
+			     | (dividend_ptr[dividend_size - 2] >> ...)))
+	     ...one division less... */
+
+	  for (i = dividend_size - 2; i >= 0; i--)
+	    {
+	      n0 = dividend_ptr[i];
+	      udiv_qrnnd_preinv (quot_ptr[i + 1], r, r,
+				 ((n1 << normalization_steps)
+				  | (n0 >> (BITS_PER_MP_LIMB - normalization_steps))),
+				 divisor_limb, divisor_limb_inverted);
+	      n1 = n0;
+	    }
+	  udiv_qrnnd_preinv (quot_ptr[0], r, r,
+			     n1 << normalization_steps,
+			     divisor_limb, divisor_limb_inverted);
+	  return r >> normalization_steps;
+	}
+      else
+	{
+	  mp_limb_t divisor_limb_inverted;
+
+	  /* Compute (2**2N - 2**N * DIVISOR_LIMB) / DIVISOR_LIMB.  The
+	     result is a (N+1)-bit approximation to 1/DIVISOR_LIMB, with the
+	     most significant bit (with weight 2**N) implicit.  */
+
+	  /* Special case for DIVISOR_LIMB == 100...000.  */
+	  if (divisor_limb << 1 == 0)
+	    divisor_limb_inverted = ~(mp_limb_t) 0;
+	  else
+	    udiv_qrnnd (divisor_limb_inverted, dummy,
+			-divisor_limb, 0, divisor_limb);
+
+	  i = dividend_size - 1;
+	  r = dividend_ptr[i];
+
+	  if (r >= divisor_limb)
+	    r = 0;
+	  else
+	    {
+	      quot_ptr[i] = 0;
+	      i--;
+	    }
+
+	  for (; i >= 0; i--)
+	    {
+	      n0 = dividend_ptr[i];
+	      udiv_qrnnd_preinv (quot_ptr[i], r, r,
+				 n0, divisor_limb, divisor_limb_inverted);
+	    }
+	  return r;
+	}
+    }
+  else
+    {
+      if (UDIV_NEEDS_NORMALIZATION)
+	{
+	  int normalization_steps;
+
+	  count_leading_zeros (normalization_steps, divisor_limb);
+	  if (normalization_steps != 0)
+	    {
+	      divisor_limb <<= normalization_steps;
+
+	      n1 = dividend_ptr[dividend_size - 1];
+	      r = n1 >> (BITS_PER_MP_LIMB - normalization_steps);
+
+	      /* Possible optimization:
+		 if (r == 0
+		 && divisor_limb > ((n1 << normalization_steps)
+				 | (dividend_ptr[dividend_size - 2] >> ...)))
+		 ...one division less... */
+
+	      for (i = dividend_size - 2; i >= 0; i--)
+		{
+		  n0 = dividend_ptr[i];
+		  udiv_qrnnd (quot_ptr[i + 1], r, r,
+			      ((n1 << normalization_steps)
+			       | (n0 >> (BITS_PER_MP_LIMB - normalization_steps))),
+			      divisor_limb);
+		  n1 = n0;
+		}
+	      udiv_qrnnd (quot_ptr[0], r, r,
+			  n1 << normalization_steps,
+			  divisor_limb);
+	      return r >> normalization_steps;
+	    }
+	}
+      /* No normalization needed, either because udiv_qrnnd doesn't require
+	 it, or because DIVISOR_LIMB is already normalized.  */
+
+      i = dividend_size - 1;
+      r = dividend_ptr[i];
+
+      if (r >= divisor_limb)
+	r = 0;
+      else
+	{
+	  quot_ptr[i] = 0;
+	  i--;
+	}
+
+      for (; i >= 0; i--)
+	{
+	  n0 = dividend_ptr[i];
+	  udiv_qrnnd (quot_ptr[i], r, r, n0, divisor_limb);
+	}
+      return r;
+    }
+}
diff --git a/REORG.TODO/stdlib/divrem.c b/REORG.TODO/stdlib/divrem.c
new file mode 100644
index 0000000000..984d945dee
--- /dev/null
+++ b/REORG.TODO/stdlib/divrem.c
@@ -0,0 +1,234 @@
+/* mpn_divrem -- Divide natural numbers, producing both remainder and
+   quotient.
+
+Copyright (C) 1993-2017 Free Software Foundation, Inc.
+
+This file is part of the GNU MP Library.
+
+The GNU MP Library is free software; you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation; either version 2.1 of the License, or (at your
+option) any later version.
+
+The GNU MP 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 Lesser General Public
+License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with the GNU MP Library; see the file COPYING.LIB.  If not, see
+<http://www.gnu.org/licenses/>.  */
+
+#include <gmp.h>
+#include "gmp-impl.h"
+#include "longlong.h"
+
+/* Divide num (NP/NSIZE) by den (DP/DSIZE) and write
+   the NSIZE-DSIZE least significant quotient limbs at QP
+   and the DSIZE long remainder at NP.  If QEXTRA_LIMBS is
+   non-zero, generate that many fraction bits and append them after the
+   other quotient limbs.
+   Return the most significant limb of the quotient, this is always 0 or 1.
+
+   Preconditions:
+   0. NSIZE >= DSIZE.
+   1. The most significant bit of the divisor must be set.
+   2. QP must either not overlap with the input operands at all, or
+      QP + DSIZE >= NP must hold true.  (This means that it's
+      possible to put the quotient in the high part of NUM, right after the
+      remainder in NUM.
+   3. NSIZE >= DSIZE, even if QEXTRA_LIMBS is non-zero.  */
+
+mp_limb_t
+mpn_divrem (mp_ptr qp, mp_size_t qextra_limbs,
+	    mp_ptr np, mp_size_t nsize,
+	    mp_srcptr dp, mp_size_t dsize)
+{
+  mp_limb_t most_significant_q_limb = 0;
+
+  switch (dsize)
+    {
+    case 0:
+      /* We are asked to divide by zero, so go ahead and do it!  (To make
+	 the compiler not remove this statement, return the value.)  */
+      return 1 / dsize;
+
+    case 1:
+      {
+	mp_size_t i;
+	mp_limb_t n1;
+	mp_limb_t d;
+
+	d = dp[0];
+	n1 = np[nsize - 1];
+
+	if (n1 >= d)
+	  {
+	    n1 -= d;
+	    most_significant_q_limb = 1;
+	  }
+
+	qp += qextra_limbs;
+	for (i = nsize - 2; i >= 0; i--)
+	  udiv_qrnnd (qp[i], n1, n1, np[i], d);
+	qp -= qextra_limbs;
+
+	for (i = qextra_limbs - 1; i >= 0; i--)
+	  udiv_qrnnd (qp[i], n1, n1, 0, d);
+
+	np[0] = n1;
+      }
+      break;
+
+    case 2:
+      {
+	mp_size_t i;
+	mp_limb_t n1, n0, n2;
+	mp_limb_t d1, d0;
+
+	np += nsize - 2;
+	d1 = dp[1];
+	d0 = dp[0];
+	n1 = np[1];
+	n0 = np[0];
+
+	if (n1 >= d1 && (n1 > d1 || n0 >= d0))
+	  {
+	    sub_ddmmss (n1, n0, n1, n0, d1, d0);
+	    most_significant_q_limb = 1;
+	  }
+
+	for (i = qextra_limbs + nsize - 2 - 1; i >= 0; i--)
+	  {
+	    mp_limb_t q;
+	    mp_limb_t r;
+
+	    if (i >= qextra_limbs)
+	      np--;
+	    else
+	      np[0] = 0;
+
+	    if (n1 == d1)
+	      {
+		/* Q should be either 111..111 or 111..110.  Need special
+		   treatment of this rare case as normal division would
+		   give overflow.  */
+		q = ~(mp_limb_t) 0;
+
+		r = n0 + d1;
+		if (r < d1)	/* Carry in the addition? */
+		  {
+		    add_ssaaaa (n1, n0, r - d0, np[0], 0, d0);
+		    qp[i] = q;
+		    continue;
+		  }
+		n1 = d0 - (d0 != 0);
+		n0 = -d0;
+	      }
+	    else
+	      {
+		udiv_qrnnd (q, r, n1, n0, d1);
+		umul_ppmm (n1, n0, d0, q);
+	      }
+
+	    n2 = np[0];
+	  q_test:
+	    if (n1 > r || (n1 == r && n0 > n2))
+	      {
+		/* The estimated Q was too large.  */
+		q--;
+
+		sub_ddmmss (n1, n0, n1, n0, 0, d0);
+		r += d1;
+		if (r >= d1)	/* If not carry, test Q again.  */
+		  goto q_test;
+	      }
+
+	    qp[i] = q;
+	    sub_ddmmss (n1, n0, r, n2, n1, n0);
+	  }
+	np[1] = n1;
+	np[0] = n0;
+      }
+      break;
+
+    default:
+      {
+	mp_size_t i;
+	mp_limb_t dX, d1, n0;
+
+	np += nsize - dsize;
+	dX = dp[dsize - 1];
+	d1 = dp[dsize - 2];
+	n0 = np[dsize - 1];
+
+	if (n0 >= dX)
+	  {
+	    if (n0 > dX || mpn_cmp (np, dp, dsize - 1) >= 0)
+	      {
+		mpn_sub_n (np, np, dp, dsize);
+		n0 = np[dsize - 1];
+		most_significant_q_limb = 1;
+	      }
+	  }
+
+	for (i = qextra_limbs + nsize - dsize - 1; i >= 0; i--)
+	  {
+	    mp_limb_t q;
+	    mp_limb_t n1, n2;
+	    mp_limb_t cy_limb;
+
+	    if (i >= qextra_limbs)
+	      {
+		np--;
+		n2 = np[dsize];
+	      }
+	    else
+	      {
+		n2 = np[dsize - 1];
+		MPN_COPY_DECR (np + 1, np, dsize);
+		np[0] = 0;
+	      }
+
+	    if (n0 == dX)
+	      /* This might over-estimate q, but it's probably not worth
+		 the extra code here to find out.  */
+	      q = ~(mp_limb_t) 0;
+	    else
+	      {
+		mp_limb_t r;
+
+		udiv_qrnnd (q, r, n0, np[dsize - 1], dX);
+		umul_ppmm (n1, n0, d1, q);
+
+		while (n1 > r || (n1 == r && n0 > np[dsize - 2]))
+		  {
+		    q--;
+		    r += dX;
+		    if (r < dX)	/* I.e. "carry in previous addition?"  */
+		      break;
+		    n1 -= n0 < d1;
+		    n0 -= d1;
+		  }
+	      }
+
+	    /* Possible optimization: We already have (q * n0) and (1 * n1)
+	       after the calculation of q.  Taking advantage of that, we
+	       could make this loop make two iterations less.  */
+
+	    cy_limb = mpn_submul_1 (np, dp, dsize, q);
+
+	    if (n2 != cy_limb)
+	      {
+		mpn_add_n (np, np, dp, dsize);
+		q--;
+	      }
+
+	    qp[i] = q;
+	    n0 = np[dsize - 1];
+	  }
+      }
+    }
+
+  return most_significant_q_limb;
+}
diff --git a/REORG.TODO/stdlib/drand48-iter.c b/REORG.TODO/stdlib/drand48-iter.c
new file mode 100644
index 0000000000..f59c803138
--- /dev/null
+++ b/REORG.TODO/stdlib/drand48-iter.c
@@ -0,0 +1,56 @@
+/* Copyright (C) 1995-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <errno.h>
+#include <stdlib.h>
+#include <limits.h>
+#include <stdint.h>
+#include <sys/types.h>
+
+/* Global state for non-reentrant functions.  */
+struct drand48_data __libc_drand48_data;
+
+
+int
+__drand48_iterate (unsigned short int xsubi[3], struct drand48_data *buffer)
+{
+  uint64_t X;
+  uint64_t result;
+
+  /* Initialize buffer, if not yet done.  */
+  if (__glibc_unlikely (!buffer->__init))
+    {
+      buffer->__a = 0x5deece66dull;
+      buffer->__c = 0xb;
+      buffer->__init = 1;
+    }
+
+  /* Do the real work.  We choose a data type which contains at least
+     48 bits.  Because we compute the modulus it does not care how
+     many bits really are computed.  */
+
+  X = (uint64_t) xsubi[2] << 32 | (uint32_t) xsubi[1] << 16 | xsubi[0];
+
+  result = X * buffer->__a + buffer->__c;
+
+  xsubi[0] = result & 0xffff;
+  xsubi[1] = (result >> 16) & 0xffff;
+  xsubi[2] = (result >> 32) & 0xffff;
+
+  return 0;
+}
diff --git a/REORG.TODO/stdlib/drand48.c b/REORG.TODO/stdlib/drand48.c
new file mode 100644
index 0000000000..b98759a32e
--- /dev/null
+++ b/REORG.TODO/stdlib/drand48.c
@@ -0,0 +1,30 @@
+/* Copyright (C) 1995-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <stdlib.h>
+
+
+double
+drand48 (void)
+{
+  double result;
+
+  (void) __erand48_r (__libc_drand48_data.__x, &__libc_drand48_data, &result);
+
+  return result;
+}
diff --git a/REORG.TODO/stdlib/drand48_r.c b/REORG.TODO/stdlib/drand48_r.c
new file mode 100644
index 0000000000..801edf43a0
--- /dev/null
+++ b/REORG.TODO/stdlib/drand48_r.c
@@ -0,0 +1,27 @@
+/* Copyright (C) 1995-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <errno.h>
+#include <math.h>
+#include <stdlib.h>
+
+int
+drand48_r (struct drand48_data *buffer, double *result)
+{
+  return __erand48_r (buffer->__x, buffer, result);
+}
diff --git a/REORG.TODO/stdlib/erand48.c b/REORG.TODO/stdlib/erand48.c
new file mode 100644
index 0000000000..b209189ba3
--- /dev/null
+++ b/REORG.TODO/stdlib/erand48.c
@@ -0,0 +1,30 @@
+/* Copyright (C) 1995-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <stdlib.h>
+
+
+double
+erand48 (unsigned short int xsubi[3])
+{
+  double result;
+
+  (void) __erand48_r (xsubi, &__libc_drand48_data, &result);
+
+  return result;
+}
diff --git a/REORG.TODO/stdlib/erand48_r.c b/REORG.TODO/stdlib/erand48_r.c
new file mode 100644
index 0000000000..8f6d3fad61
--- /dev/null
+++ b/REORG.TODO/stdlib/erand48_r.c
@@ -0,0 +1,47 @@
+/* Copyright (C) 1995-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <ieee754.h>
+#include <stdlib.h>
+#include <limits.h>
+
+
+int
+__erand48_r (unsigned short int xsubi[3], struct drand48_data *buffer,
+	     double *result)
+{
+  union ieee754_double temp;
+
+  /* Compute next state.  */
+  if (__drand48_iterate (xsubi, buffer) < 0)
+    return -1;
+
+  /* Construct a positive double with the 48 random bits distributed over
+     its fractional part so the resulting FP number is [0.0,1.0).  */
+
+  temp.ieee.negative = 0;
+  temp.ieee.exponent = IEEE754_DOUBLE_BIAS;
+  temp.ieee.mantissa0 = (xsubi[2] << 4) | (xsubi[1] >> 12);
+  temp.ieee.mantissa1 = ((xsubi[1] & 0xfff) << 20) | (xsubi[0] << 4);
+
+  /* Please note the lower 4 bits of mantissa1 are always 0.  */
+  *result = temp.d - 1.0;
+
+  return 0;
+}
+weak_alias (__erand48_r, erand48_r)
diff --git a/REORG.TODO/stdlib/errno.h b/REORG.TODO/stdlib/errno.h
new file mode 100644
index 0000000000..65f2f4570c
--- /dev/null
+++ b/REORG.TODO/stdlib/errno.h
@@ -0,0 +1,72 @@
+/* Copyright (C) 1991-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ *	ISO C99 Standard: 7.5 Errors	<errno.h>
+ */
+
+#ifndef	_ERRNO_H
+
+/* The includer defined __need_Emath if he wants only the definitions
+   of EDOM and ERANGE, and not everything else.  */
+#ifndef	__need_Emath
+# define _ERRNO_H	1
+# include <features.h>
+#endif
+
+__BEGIN_DECLS
+
+/* Get the error number constants from the system-specific file.
+   This file will test __need_Emath and _ERRNO_H.  */
+#include <bits/errno.h>
+#undef	__need_Emath
+
+#ifdef	_ERRNO_H
+
+/* Declare the `errno' variable, unless it's defined as a macro by
+   bits/errno.h.  This is the case in GNU, where it is a per-thread
+   variable.  This redeclaration using the macro still works, but it
+   will be a function declaration without a prototype and may trigger
+   a -Wstrict-prototypes warning.  */
+#ifndef	errno
+extern int errno;
+#endif
+
+#ifdef __USE_GNU
+
+/* The full and simple forms of the name with which the program was
+   invoked.  These variables are set up automatically at startup based on
+   the value of ARGV[0] (this works only if you use GNU ld).  */
+extern char *program_invocation_name, *program_invocation_short_name;
+#endif /* __USE_GNU */
+#endif /* _ERRNO_H */
+
+__END_DECLS
+
+#endif /* _ERRNO_H */
+
+/* The Hurd <bits/errno.h> defines `error_t' as an enumerated type so
+   that printing `error_t' values in the debugger shows the names.  We
+   might need this definition sometimes even if this file was included
+   before.  */
+#if defined __USE_GNU || defined __need_error_t
+# ifndef __error_t_defined
+typedef int error_t;
+#  define __error_t_defined	1
+# endif
+# undef __need_error_t
+#endif
diff --git a/REORG.TODO/stdlib/exit.c b/REORG.TODO/stdlib/exit.c
new file mode 100644
index 0000000000..c0b6d666c7
--- /dev/null
+++ b/REORG.TODO/stdlib/exit.c
@@ -0,0 +1,107 @@
+/* Copyright (C) 1991-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <sysdep.h>
+#include "exit.h"
+
+#include "set-hooks.h"
+DEFINE_HOOK (__libc_atexit, (void))
+
+
+/* Call all functions registered with `atexit' and `on_exit',
+   in the reverse of the order in which they were registered
+   perform stdio cleanup, and terminate program execution with STATUS.  */
+void
+attribute_hidden
+__run_exit_handlers (int status, struct exit_function_list **listp,
+		     bool run_list_atexit, bool run_dtors)
+{
+  /* First, call the TLS destructors.  */
+#ifndef SHARED
+  if (&__call_tls_dtors != NULL)
+#endif
+    if (run_dtors)
+      __call_tls_dtors ();
+
+  /* We do it this way to handle recursive calls to exit () made by
+     the functions registered with `atexit' and `on_exit'. We call
+     everyone on the list and use the status value in the last
+     exit (). */
+  while (*listp != NULL)
+    {
+      struct exit_function_list *cur = *listp;
+
+      while (cur->idx > 0)
+	{
+	  const struct exit_function *const f =
+	    &cur->fns[--cur->idx];
+	  switch (f->flavor)
+	    {
+	      void (*atfct) (void);
+	      void (*onfct) (int status, void *arg);
+	      void (*cxafct) (void *arg, int status);
+
+	    case ef_free:
+	    case ef_us:
+	      break;
+	    case ef_on:
+	      onfct = f->func.on.fn;
+#ifdef PTR_DEMANGLE
+	      PTR_DEMANGLE (onfct);
+#endif
+	      onfct (status, f->func.on.arg);
+	      break;
+	    case ef_at:
+	      atfct = f->func.at;
+#ifdef PTR_DEMANGLE
+	      PTR_DEMANGLE (atfct);
+#endif
+	      atfct ();
+	      break;
+	    case ef_cxa:
+	      cxafct = f->func.cxa.fn;
+#ifdef PTR_DEMANGLE
+	      PTR_DEMANGLE (cxafct);
+#endif
+	      cxafct (f->func.cxa.arg, status);
+	      break;
+	    }
+	}
+
+      *listp = cur->next;
+      if (*listp != NULL)
+	/* Don't free the last element in the chain, this is the statically
+	   allocate element.  */
+	free (cur);
+    }
+
+  if (run_list_atexit)
+    RUN_HOOK (__libc_atexit, ());
+
+  _exit (status);
+}
+
+
+void
+exit (int status)
+{
+  __run_exit_handlers (status, &__exit_funcs, true, true);
+}
+libc_hidden_def (exit)
diff --git a/REORG.TODO/stdlib/exit.h b/REORG.TODO/stdlib/exit.h
new file mode 100644
index 0000000000..7f2e679246
--- /dev/null
+++ b/REORG.TODO/stdlib/exit.h
@@ -0,0 +1,77 @@
+/* Copyright (C) 1991-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef	_EXIT_H
+#define _EXIT_H 1
+
+#include <stdbool.h>
+#include <stdint.h>
+
+enum
+{
+  ef_free,	/* `ef_free' MUST be zero!  */
+  ef_us,
+  ef_on,
+  ef_at,
+  ef_cxa
+};
+
+struct exit_function
+  {
+    /* `flavour' should be of type of the `enum' above but since we need
+       this element in an atomic operation we have to use `long int'.  */
+    long int flavor;
+    union
+      {
+	void (*at) (void);
+	struct
+	  {
+	    void (*fn) (int status, void *arg);
+	    void *arg;
+	  } on;
+	struct
+	  {
+	    void (*fn) (void *arg, int status);
+	    void *arg;
+	    void *dso_handle;
+	  } cxa;
+      } func;
+  };
+struct exit_function_list
+  {
+    struct exit_function_list *next;
+    size_t idx;
+    struct exit_function fns[32];
+  };
+extern struct exit_function_list *__exit_funcs attribute_hidden;
+extern struct exit_function_list *__quick_exit_funcs attribute_hidden;
+
+extern struct exit_function *__new_exitfn (struct exit_function_list **listp);
+extern uint64_t __new_exitfn_called attribute_hidden;
+
+extern void __run_exit_handlers (int status,
+				 struct exit_function_list **listp,
+				 bool run_list_atexit, bool run_dtors)
+  attribute_hidden __attribute__ ((__noreturn__));
+
+extern int __internal_atexit (void (*func) (void *), void *arg, void *d,
+			      struct exit_function_list **listp)
+  attribute_hidden;
+extern int __cxa_at_quick_exit (void (*func) (void *), void *d);
+
+
+#endif	/* exit.h  */
diff --git a/REORG.TODO/stdlib/fmtmsg.c b/REORG.TODO/stdlib/fmtmsg.c
new file mode 100644
index 0000000000..ac0c3aa28a
--- /dev/null
+++ b/REORG.TODO/stdlib/fmtmsg.c
@@ -0,0 +1,386 @@
+/* Copyright (C) 1997-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <fmtmsg.h>
+#include <libc-lock.h>
+#include <stdio.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/syslog.h>
+#include <wchar.h>
+
+
+/* We have global data, protect the modification.  */
+__libc_lock_define_initialized (static, lock)
+
+
+enum
+{
+  label_mask = 0x01,
+  severity_mask = 0x02,
+  text_mask = 0x04,
+  action_mask = 0x08,
+  tag_mask = 0x10,
+  all_mask = label_mask | severity_mask | text_mask | action_mask | tag_mask
+};
+
+static const struct
+{
+  uint32_t len;
+  /* Adjust the size if new elements are added.  */
+  const char name[12];
+} keywords[] =
+  {
+    { 5, "label" },
+    { 8, "severity" },
+    { 4, "text" },
+    { 6, "action"},
+    { 3, "tag" }
+  };
+#define NKEYWORDS (sizeof( keywords) / sizeof (keywords[0]))
+
+
+struct severity_info
+{
+  int severity;
+  const char *string;
+  struct severity_info *next;
+};
+
+
+/* List of known severities.  */
+static const struct severity_info nosev =
+{
+  MM_NOSEV, "", NULL
+};
+static const struct severity_info haltsev =
+{
+  MM_HALT, "HALT", (struct severity_info *) &nosev
+};
+static const struct severity_info errorsev =
+{
+  MM_ERROR, "ERROR", (struct severity_info *) &haltsev
+};
+static const struct severity_info warningsev =
+{
+  MM_WARNING, "WARNING", (struct severity_info *) &errorsev
+};
+static const struct severity_info infosev =
+{
+  MM_INFO, "INFO", (struct severity_info *) &warningsev
+};
+
+/* Start of the list.  */
+static struct severity_info *severity_list = (struct severity_info *) &infosev;
+
+/* Mask of values we will print.  */
+static int print;
+
+/* Prototypes for local functions.  */
+static void init (void);
+static int internal_addseverity (int severity, const char *string)
+     internal_function;
+
+
+int
+fmtmsg (long int classification, const char *label, int severity,
+	const char *text, const char *action, const char *tag)
+{
+  __libc_once_define (static, once);
+  struct severity_info *severity_rec;
+
+  /* Make sure everything is initialized.  */
+  __libc_once (once, init);
+
+  /* Start the real work.  First check whether the input is ok.  */
+  if (label != MM_NULLLBL)
+    {
+      /* Must be two fields, separated by a colon.  */
+      const char *cp = strchr (label, ':');
+      if (cp == NULL)
+	return MM_NOTOK;
+
+      /* The first field must not contain more than 10 bytes.  */
+      if (cp - label > 10
+	  /* The second field must not have more than 14 bytes.  */
+	  || strlen (cp + 1) > 14)
+	return MM_NOTOK;
+    }
+
+#ifdef __libc_ptf_call
+  /* We do not want this call to be cut short by a thread
+     cancellation.  Therefore disable cancellation for now.  */
+  int state = PTHREAD_CANCEL_ENABLE;
+  __libc_ptf_call (__pthread_setcancelstate,
+		   (PTHREAD_CANCEL_DISABLE, &state), 0);
+#endif
+
+  __libc_lock_lock (lock);
+
+  for (severity_rec = severity_list; severity_rec != NULL;
+       severity_rec = severity_rec->next)
+    if (severity == severity_rec->severity)
+      /* Bingo.  */
+      break;
+
+  /* If we don't know anything about the severity level return an error.  */
+  int result = MM_NOTOK;
+  if (severity_rec != NULL)
+    {
+      result = MM_OK;
+
+      /* Now we can print.  */
+      if (classification & MM_PRINT)
+	{
+	  int do_label = (print & label_mask) && label != MM_NULLLBL;
+	  int do_severity = (print & severity_mask) && severity != MM_NULLSEV;
+	  int do_text = (print & text_mask) && text != MM_NULLTXT;
+	  int do_action = (print & action_mask) && action != MM_NULLACT;
+	  int do_tag = (print & tag_mask) && tag != MM_NULLTAG;
+	  int need_colon = (do_label
+			    && (do_severity | do_text | do_action | do_tag));
+
+	  if (__fxprintf (stderr, "%s%s%s%s%s%s%s%s%s%s\n",
+			  do_label ? label : "",
+			  need_colon ? ": " : "",
+			  do_severity ? severity_rec->string : "",
+			  do_severity && (do_text | do_action | do_tag)
+			  ? ": " : "",
+			  do_text ? text : "",
+			  do_text && (do_action | do_tag) ? "\n" : "",
+			  do_action ? "TO FIX: " : "",
+			  do_action ? action : "",
+			  do_action && do_tag ? "  " : "",
+			  do_tag ? tag : "") < 0)
+	    /* Oh, oh.  An error occurred during the output.  */
+	    result = MM_NOMSG;
+	}
+
+      if (classification & MM_CONSOLE)
+	{
+	  int do_label = label != MM_NULLLBL;
+	  int do_severity = severity != MM_NULLSEV;
+	  int do_text = text != MM_NULLTXT;
+	  int do_action = action != MM_NULLACT;
+	  int do_tag = tag != MM_NULLTAG;
+	  int need_colon = (do_label
+			    && (do_severity | do_text | do_action | do_tag));
+
+	  syslog (LOG_ERR, "%s%s%s%s%s%s%s%s%s%s\n",
+		  do_label ? label : "",
+		  need_colon ? ": " : "",
+		  do_severity ? severity_rec->string : "",
+		  do_severity && (do_text | do_action | do_tag) ? ": " : "",
+		  do_text ? text : "",
+		  do_text && (do_action | do_tag) ? "\n" : "",
+		  do_action ? "TO FIX: " : "",
+		  do_action ? action : "",
+		  do_action && do_tag ? "  " : "",
+		  do_tag ? tag : "");
+	}
+    }
+
+  __libc_lock_unlock (lock);
+
+#ifdef __libc_ptf_call
+  __libc_ptf_call (__pthread_setcancelstate, (state, NULL), 0);
+#endif
+
+  return result;
+}
+
+
+/* Initialize from environment variable content.  */
+static void
+init (void)
+{
+  const char *msgverb_var = getenv ("MSGVERB");
+  const char *sevlevel_var = getenv ("SEV_LEVEL");
+
+  if (msgverb_var != NULL && msgverb_var[0] != '\0')
+    {
+      /* Using this extra variable allows us to work without locking.  */
+      do
+	{
+	  size_t cnt;
+
+	  for (cnt = 0; cnt < NKEYWORDS; ++cnt)
+	    if (memcmp (msgverb_var,
+			keywords[cnt].name, keywords[cnt].len) == 0
+		&& (msgverb_var[keywords[cnt].len] == ':'
+		    || msgverb_var[keywords[cnt].len] == '\0'))
+	      break;
+
+	  if (cnt < NKEYWORDS)
+	    {
+	      print |= 1 << cnt;
+
+	      msgverb_var += keywords[cnt].len;
+	      if (msgverb_var[0] == ':')
+		++msgverb_var;
+	    }
+	  else
+	    {
+	      /* We found an illegal keyword in the environment
+		 variable.  The specifications say that we print all
+		 fields.  */
+	      print = all_mask;
+	      break;
+	    }
+	}
+      while (msgverb_var[0] != '\0');
+    }
+  else
+    print = all_mask;
+
+
+  if (sevlevel_var != NULL)
+    {
+      __libc_lock_lock (lock);
+
+      while (sevlevel_var[0] != '\0')
+	{
+	  const char *end = __strchrnul (sevlevel_var, ':');
+	  int level;
+
+	  /* First field: keyword.  This is not used here but it must be
+	     present.  */
+	  while (sevlevel_var < end)
+	    if (*sevlevel_var++ == ',')
+	      break;
+
+	  if (sevlevel_var < end)
+	    {
+	      /* Second field: severity level, a number.  */
+	      char *cp;
+
+	      level = strtol (sevlevel_var, &cp, 0);
+	      if (cp != sevlevel_var && cp < end && *cp++ == ','
+		  && level > MM_INFO)
+		{
+		  const char *new_string;
+
+		  new_string = __strndup (cp, end - cp);
+
+		  if (new_string != NULL
+		      && (internal_addseverity (level, new_string)
+			  != MM_OK))
+		    free ((char *) new_string);
+		}
+	    }
+
+	  sevlevel_var = end + (*end == ':' ? 1 : 0);
+	}
+
+      __libc_lock_unlock (lock);
+    }
+}
+
+
+/* Add the new entry to the list.  */
+static int
+internal_function
+internal_addseverity (int severity, const char *string)
+{
+  struct severity_info *runp, *lastp;
+  int result = MM_OK;
+
+  /* First see if there is already a record for the severity level.  */
+  for (runp = severity_list, lastp = NULL; runp != NULL; runp = runp->next)
+    if (runp->severity == severity)
+      break;
+    else
+      lastp = runp;
+
+  if (runp != NULL)
+    {
+      if (string != NULL)
+	/* Change the string.  */
+	runp->string = string;
+      else
+	{
+	  /* Remove the severity class.  */
+	  if (lastp == NULL)
+	    severity_list = runp->next;
+	  else
+	    lastp->next = runp->next;
+
+	  free (runp);
+	}
+    }
+  else if (string != NULL)
+    {
+      runp = malloc (sizeof (*runp));
+      if (runp == NULL)
+	result = MM_NOTOK;
+      else
+	{
+	  runp->severity = severity;
+	  runp->next = severity_list;
+	  runp->string = string;
+	  severity_list = runp;
+	}
+    }
+  else
+    /* We tried to remove a non-existing severity class.  */
+    result = MM_NOTOK;
+
+  return result;
+}
+
+
+/* Add new severity level or remove old one.  */
+int
+__addseverity (int severity, const char *string)
+{
+  int result;
+
+  /* Prevent illegal SEVERITY values.  */
+  if (severity <= MM_INFO)
+    return MM_NOTOK;
+
+  /* Protect the global data.  */
+  __libc_lock_lock (lock);
+
+  /* Do the real work.  */
+  result = internal_addseverity (severity, string);
+
+  /* Release the lock.  */
+  __libc_lock_unlock (lock);
+
+  return result;
+}
+weak_alias (__addseverity, addseverity)
+
+
+libc_freeres_fn (free_mem)
+{
+  struct severity_info *runp = severity_list;
+
+  while (runp != NULL)
+    if (runp->severity > MM_INFO)
+      {
+	/* This is data we have to release.  */
+	struct severity_info *here = runp;
+	runp = runp->next;
+	free (here);
+      }
+    else
+      runp = runp->next;
+}
diff --git a/REORG.TODO/stdlib/fmtmsg.h b/REORG.TODO/stdlib/fmtmsg.h
new file mode 100644
index 0000000000..0b9069ca10
--- /dev/null
+++ b/REORG.TODO/stdlib/fmtmsg.h
@@ -0,0 +1,105 @@
+/* Message display handling.
+   Copyright (C) 1997-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef __FMTMSG_H
+#define __FMTMSG_H	1
+
+#include <features.h>
+
+
+__BEGIN_DECLS
+
+/* Values to control `fmtmsg' function.  */
+enum
+{
+  MM_HARD = 0x001,	/* Source of the condition is hardware.  */
+#define MM_HARD MM_HARD
+  MM_SOFT = 0x002,	/* Source of the condition is software.  */
+#define MM_SOFT MM_SOFT
+  MM_FIRM = 0x004,	/* Source of the condition is firmware.  */
+#define MM_FIRM MM_FIRM
+  MM_APPL = 0x008,	/* Condition detected by application.  */
+#define MM_APPL MM_APPL
+  MM_UTIL = 0x010,	/* Condition detected by utility.  */
+#define MM_UTIL MM_UTIL
+  MM_OPSYS = 0x020,	/* Condition detected by operating system.  */
+#define MM_OPSYS MM_OPSYS
+  MM_RECOVER = 0x040,	/* Recoverable error.  */
+#define MM_RECOVER MM_RECOVER
+  MM_NRECOV = 0x080,	/* Non-recoverable error.  */
+#define MM_NRECOV MM_NRECOV
+  MM_PRINT = 0x100,	/* Display message in standard error.  */
+#define MM_PRINT MM_PRINT
+  MM_CONSOLE = 0x200	/* Display message on system console.  */
+#define MM_CONSOLE MM_CONSOLE
+};
+
+/* Values to be for SEVERITY parameter of `fmtmsg'.  */
+enum
+{
+  MM_NOSEV = 0,		/* No severity level provided for the message.  */
+#define MM_NOSEV MM_NOSEV
+  MM_HALT,		/* Error causing application to halt.  */
+#define MM_HALT MM_HALT
+  MM_ERROR,		/* Application has encountered a non-fatal fault.  */
+#define MM_ERROR MM_ERROR
+  MM_WARNING,		/* Application has detected unusual non-error
+			   condition.  */
+#define MM_WARNING MM_WARNING
+  MM_INFO		/* Informative message.  */
+#define MM_INFO MM_INFO
+};
+
+
+/* Macros which can be used as null values for the arguments of `fmtmsg'.  */
+#define MM_NULLLBL	((char *) 0)
+#define MM_NULLSEV	0
+#define MM_NULLMC	((long int) 0)
+#define MM_NULLTXT	((char *) 0)
+#define MM_NULLACT	((char *) 0)
+#define MM_NULLTAG	((char *) 0)
+
+
+/* Possible return values of `fmtmsg'.  */
+enum
+{
+  MM_NOTOK = -1,
+#define MM_NOTOK MM_NOTOK
+  MM_OK = 0,
+#define MM_OK MM_OK
+  MM_NOMSG = 1,
+#define MM_NOMSG MM_NOMSG
+  MM_NOCON = 4
+#define MM_NOCON MM_NOCON
+};
+
+
+/* Print message with given CLASSIFICATION, LABEL, SEVERITY, TEXT, ACTION
+   and TAG to console or standard error.  */
+extern int fmtmsg (long int __classification, const char *__label,
+		   int __severity, const char *__text,
+		   const char *__action, const char *__tag);
+
+#ifdef __USE_MISC
+/* Add or remove severity level.  */
+extern int addseverity (int __severity, const char *__string) __THROW;
+#endif
+
+__END_DECLS
+
+#endif /* fmtmsg.h */
diff --git a/REORG.TODO/stdlib/fpioconst.c b/REORG.TODO/stdlib/fpioconst.c
new file mode 100644
index 0000000000..a0563b9676
--- /dev/null
+++ b/REORG.TODO/stdlib/fpioconst.c
@@ -0,0 +1,1329 @@
+/* Table of MP integer constants 10^(2^i), used for floating point <-> decimal.
+   Copyright (C) 1995-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include "fpioconst.h"
+#include <gmp-mparam.h>		/* This defines BITS_PER_MP_LIMB.  */
+
+/* First page	: 32-bit limbs
+   Second page	: 64-bit limbs
+   Last page	: table of pointers
+
+   The tables (apart from internal #if conditions) may be generated
+   with gen-fpioconst.c.
+ */
+
+#if BITS_PER_MP_LIMB == 32
+
+/* Table with constants of 10^(2^i), i=0..12 for 32-bit limbs.	*/
+
+const mp_limb_t __tens[] =
+{
+#define TENS_P0_IDX	0
+#define TENS_P0_SIZE	3
+  [TENS_P0_IDX] = 0x00000000, 0x00000000, 0x0000000a,
+
+#define TENS_P1_IDX	(TENS_P0_IDX + TENS_P0_SIZE)
+#define TENS_P1_SIZE	3
+  [TENS_P1_IDX] = 0x00000000, 0x00000000, 0x00000064,
+
+#define TENS_P2_IDX	(TENS_P1_IDX + TENS_P1_SIZE)
+#define TENS_P2_SIZE	3
+  [TENS_P2_IDX] = 0x00000000, 0x00000000, 0x00002710,
+
+#define TENS_P3_IDX	(TENS_P2_IDX + TENS_P2_SIZE)
+#define TENS_P3_SIZE	3
+  [TENS_P3_IDX] = 0x00000000, 0x00000000, 0x05f5e100,
+
+#define TENS_P4_IDX	(TENS_P3_IDX + TENS_P3_SIZE)
+#define TENS_P4_SIZE	4
+  [TENS_P4_IDX] = 0x00000000, 0x00000000, 0x6fc10000, 0x002386f2,
+
+#define TENS_P5_IDX	(TENS_P4_IDX + TENS_P4_SIZE)
+#define TENS_P5_SIZE	6
+  [TENS_P5_IDX] = 0x00000000, 0x00000000, 0x00000000, 0x85acef81, 0x2d6d415b,
+  0x000004ee,
+
+#define TENS_P6_IDX	(TENS_P5_IDX + TENS_P5_SIZE)
+#define TENS_P6_SIZE	9
+  [TENS_P6_IDX] = 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xbf6a1f01,
+  0x6e38ed64, 0xdaa797ed, 0xe93ff9f4, 0x00184f03,
+
+#define TENS_P7_IDX	(TENS_P6_IDX + TENS_P6_SIZE)
+#define TENS_P7_SIZE	16
+  [TENS_P7_IDX] = 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x2e953e01, 0x03df9909, 0x0f1538fd, 0x2374e42f, 0xd3cff5ec,
+  0xc404dc08, 0xbccdb0da, 0xa6337f19, 0xe91f2603, 0x0000024e,
+
+#define TENS_P8_IDX	(TENS_P7_IDX + TENS_P7_SIZE)
+#define TENS_P8_SIZE	29
+  [TENS_P8_IDX] = 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x982e7c01,
+  0xbed3875b, 0xd8d99f72, 0x12152f87, 0x6bde50c6, 0xcf4a6e70, 0xd595d80f,
+  0x26b2716e, 0xadc666b0, 0x1d153624, 0x3c42d35a, 0x63ff540e, 0xcc5573c0,
+  0x65f9ef17, 0x55bc28f2, 0x80dcc7f7, 0xf46eeddc, 0x5fdcefce, 0x000553f7,
+
+#define TENS_P9_IDX	(TENS_P8_IDX + TENS_P8_SIZE)
+#define TENS_P9_SIZE	56
+  [TENS_P9_IDX] = 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0xfc6cf801, 0x77f27267, 0x8f9546dc, 0x5d96976f, 0xb83a8a97,
+  0xc31e1ad9, 0x46c40513, 0x94e65747, 0xc88976c1, 0x4475b579, 0x28f8733b,
+  0xaa1da1bf, 0x703ed321, 0x1e25cfea, 0xb21a2f22, 0xbc51fb2e, 0x96e14f5d,
+  0xbfa3edac, 0x329c57ae, 0xe7fc7153, 0xc3fc0695, 0x85a91924, 0xf95f635e,
+  0xb2908ee0, 0x93abade4, 0x1366732a, 0x9449775c, 0x69be5b0e, 0x7343afac,
+  0xb099bc81, 0x45a71d46, 0xa2699748, 0x8cb07303, 0x8a0b1f13, 0x8cab8a97,
+  0xc1d238d9, 0x633415d4, 0x0000001c,
+
+#define TENS_P10_IDX	(TENS_P9_IDX + TENS_P9_SIZE)
+#define TENS_P10_SIZE	109
+  [TENS_P10_IDX] = 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x2919f001,
+  0xf55b2b72, 0x6e7c215b, 0x1ec29f86, 0x991c4e87, 0x15c51a88, 0x140ac535,
+  0x4c7d1e1a, 0xcc2cd819, 0x0ed1440e, 0x896634ee, 0x7de16cfb, 0x1e43f61f,
+  0x9fce837d, 0x231d2b9c, 0x233e55c7, 0x65dc60d7, 0xf451218b, 0x1c5cd134,
+  0xc9635986, 0x922bbb9f, 0xa7e89431, 0x9f9f2a07, 0x62be695a, 0x8e1042c4,
+  0x045b7a74, 0x1abe1de3, 0x8ad822a5, 0xba34c411, 0xd814b505, 0xbf3fdeb3,
+  0x8fc51a16, 0xb1b896bc, 0xf56deeec, 0x31fb6bfd, 0xb6f4654b, 0x101a3616,
+  0x6b7595fb, 0xdc1a47fe, 0x80d98089, 0x80bda5a5, 0x9a202882, 0x31eb0f66,
+  0xfc8f1f90, 0x976a3310, 0xe26a7b7e, 0xdf68368a, 0x3ce3a0b8, 0x8e4262ce,
+  0x75a351a2, 0x6cb0b6c9, 0x44597583, 0x31b5653f, 0xc356e38a, 0x35faaba6,
+  0x0190fba0, 0x9fc4ed52, 0x88bc491b, 0x1640114a, 0x005b8041, 0xf4f3235e,
+  0x1e8d4649, 0x36a8de06, 0x73c55349, 0xa7e6bd2a, 0xc1a6970c, 0x47187094,
+  0xd2db49ef, 0x926c3f5b, 0xae6209d4, 0x2d433949, 0x34f4a3c6, 0xd4305d94,
+  0xd9d61a05, 0x00000325,
+
+#if FPIOCONST_HAVE_EXTENDED_RANGE
+# define TENS_P11_IDX	(TENS_P10_IDX + TENS_P10_SIZE)
+# define TENS_P11_SIZE	215
+  [TENS_P11_IDX] = 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x1333e001, 0xe3096865, 0xb27d4d3f, 0x49e28dcf, 0xec2e4721,
+  0xee87e354, 0xb6067584, 0x368b8abb, 0xa5e5a191, 0x2ed56d55, 0xfd827773,
+  0xea50d142, 0x51b78db2, 0x98342c9e, 0xc850dabc, 0x866ed6f1, 0x19342c12,
+  0x92794987, 0xd2f869c2, 0x66912e4a, 0x71c7fd8f, 0x57a7842d, 0x235552eb,
+  0xfb7fedcc, 0xf3861ce0, 0x38209ce1, 0x9713b449, 0x34c10134, 0x8c6c54de,
+  0xa7a8289c, 0x2dbb6643, 0xe3cb64f3, 0x8074ff01, 0xe3892ee9, 0x10c17f94,
+  0xa8f16f92, 0xa8281ed6, 0x967abbb3, 0x5a151440, 0x9952fbed, 0x13b41e44,
+  0xafe609c3, 0xa2bca416, 0xf111821f, 0xfb1264b4, 0x91bac974, 0xd6c7d6ab,
+  0x8e48ff35, 0x4419bd43, 0xc4a65665, 0x685e5510, 0x33554c36, 0xab498697,
+  0x0dbd21fe, 0x3cfe491d, 0x982da466, 0xcbea4ca7, 0x9e110c7b, 0x79c56b8a,
+  0x5fc5a047, 0x84d80e2e, 0x1aa9f444, 0x730f203c, 0x6a57b1ab, 0xd752f7a6,
+  0x87a7dc62, 0x944545ff, 0x40660460, 0x77c1a42f, 0xc9ac375d, 0xe866d7ef,
+  0x744695f0, 0x81428c85, 0xa1fc6b96, 0xd7917c7b, 0x7bf03c19, 0x5b33eb41,
+  0x5715f791, 0x8f6cae5f, 0xdb0708fd, 0xb125ac8e, 0x785ce6b7, 0x56c6815b,
+  0x6f46eadb, 0x4eeebeee, 0x195355d8, 0xa244de3c, 0x9d7389c0, 0x53761abd,
+  0xcf99d019, 0xde9ec24b, 0x0d76ce39, 0x70beb181, 0x2e55ecee, 0xd5f86079,
+  0xf56d9d4b, 0xfb8886fb, 0x13ef5a83, 0x408f43c5, 0x3f3389a4, 0xfad37943,
+  0x58ccf45c, 0xf82df846, 0x415c7f3e, 0x2915e818, 0x8b3d5cf4, 0x6a445f27,
+  0xf8dbb57a, 0xca8f0070, 0x8ad803ec, 0xb2e87c34, 0x038f9245, 0xbedd8a6c,
+  0xc7c9dee0, 0x0eac7d56, 0x2ad3fa14, 0xe0de0840, 0xf775677c, 0xf1bd0ad5,
+  0x92be221e, 0x87fa1fb9, 0xce9d04a4, 0xd2c36fa9, 0x3f6f7024, 0xb028af62,
+  0x907855ee, 0xd83e49d6, 0x4efac5dc, 0xe7151aab, 0x77cd8c6b, 0x0a753b7d,
+  0x0af908b4, 0x8c983623, 0xe50f3027, 0x94222771, 0x1d08e2d6, 0xf7e928e6,
+  0xf2ee5ca6, 0x1b61b93c, 0x11eb962b, 0x9648b21c, 0xce2bcba1, 0x34f77154,
+  0x7bbebe30, 0xe526a319, 0x8ce329ac, 0xde4a74d2, 0xb5dc53d5, 0x0009e8b3,
+
+# define TENS_P12_IDX	(TENS_P11_IDX + TENS_P11_SIZE)
+# define TENS_P12_SIZE	428
+  [TENS_P12_IDX] = 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x2a67c001,
+  0xd4724e8d, 0x8efe7ae7, 0xf89a1e90, 0xef084117, 0x54e05154, 0x13b1bb51,
+  0x506be829, 0xfb29b172, 0xe599574e, 0xf0da6146, 0x806c0ed3, 0xb86ae5be,
+  0x45155e93, 0xc0591cc2, 0x7e1e7c34, 0x7c4823da, 0x1d1f4cce, 0x9b8ba1e8,
+  0xd6bfdf75, 0xe341be10, 0xc2dfae78, 0x016b67b2, 0x0f237f1a, 0x3dbeabcd,
+  0xaf6a2574, 0xcab3e6d7, 0x142e0e80, 0x61959127, 0x2c234811, 0x87009701,
+  0xcb4bf982, 0xf8169c84, 0x88052f8c, 0x68dde6d4, 0xbc131761, 0xff0b0905,
+  0x54ab9c41, 0x7613b224, 0x1a1c304e, 0x3bfe167b, 0x441c2d47, 0x4f6cea9c,
+  0x78f06181, 0xeb659fb8, 0x30c7ae41, 0x947e0d0e, 0xa1ebcad7, 0xd97d9556,
+  0x2130504d, 0x1a8309cb, 0xf2acd507, 0x3f8ec72a, 0xfd82373a, 0x95a842bc,
+  0x280f4d32, 0xf3618ac0, 0x811a4f04, 0x6dc3a5b4, 0xd3967a1b, 0x15b8c898,
+  0xdcfe388f, 0x454eb2a0, 0x8738b909, 0x10c4e996, 0x2bd9cc11, 0x3297cd0c,
+  0x655fec30, 0xae0725b1, 0xf4090ee8, 0x037d19ee, 0x398c6fed, 0x3b9af26b,
+  0xc994a450, 0xb5341743, 0x75a697b2, 0xac50b9c1, 0x3ccb5b92, 0xffe06205,
+  0xa8329761, 0xdfea5242, 0xeb83cadb, 0xe79dadf7, 0x3c20ee69, 0x1e0a6817,
+  0x7021b97a, 0x743074fa, 0x176ca776, 0x77fb8af6, 0xeca19beb, 0x92baf1de,
+  0xaf63b712, 0xde35c88b, 0xa4eb8f8c, 0xe137d5e9, 0x40b464a0, 0x87d1cde8,
+  0x42923bbd, 0xcd8f62ff, 0x2e2690f3, 0x095edc16, 0x59c89f1b, 0x1fa8fd5d,
+  0x5138753d, 0x390a2b29, 0x80152f18, 0x2dd8d925, 0xf984d83e, 0x7a872e74,
+  0xc19e1faf, 0xed4d542d, 0xecf9b5d0, 0x9462ea75, 0xc53c0adf, 0x0caea134,
+  0x37a2d439, 0xc8fa2e8a, 0x2181327e, 0x6e7bb827, 0x2d240820, 0x50be10e0,
+  0x5893d4b8, 0xab312bb9, 0x1f2b2322, 0x440b3f25, 0xbf627ede, 0x72dac789,
+  0xb608b895, 0x78787e2a, 0x86deb3f0, 0x6fee7aab, 0xbb9373f4, 0x27ecf57b,
+  0xf7d8b57e, 0xfca26a9f, 0x3d04e8d2, 0xc9df13cb, 0x3172826a, 0xcd9e8d7c,
+  0xa8fcd8e0, 0xb2c39497, 0x307641d9, 0x1cc939c1, 0x2608c4cf, 0xb6d1c7bf,
+  0x3d326a7e, 0xeeaf19e6, 0x8e13e25f, 0xee63302b, 0x2dfe6d97, 0x25971d58,
+  0xe41d3cc4, 0x0a80627c, 0xab8db59a, 0x9eea37c8, 0xe90afb77, 0x90ca19cf,
+  0x9ee3352c, 0x3613c850, 0xfe78d682, 0x788f6e50, 0x5b060904, 0xb71bd1a4,
+  0x3fecb534, 0xb32c450c, 0x20c33857, 0xa6e9cfda, 0x0239f4ce, 0x48497187,
+  0xa19adb95, 0xb492ed8a, 0x95aca6a8, 0x4dcd6cd9, 0xcf1b2350, 0xfbe8b12a,
+  0x1a67778c, 0x38eb3acc, 0xc32da383, 0xfb126ab1, 0xa03f40a8, 0xed5bf546,
+  0xe9ce4724, 0x4c4a74fd, 0x73a130d8, 0xd9960e2d, 0xa2ebd6c1, 0x94ab6feb,
+  0x6f233b7c, 0x49126080, 0x8e7b9a73, 0x4b8c9091, 0xd298f999, 0x35e836b5,
+  0xa96ddeff, 0x96119b31, 0x6b0dd9bc, 0xc6cc3f8d, 0x282566fb, 0x72b882e7,
+  0xd6769f3b, 0xa674343d, 0x00fc509b, 0xdcbf7789, 0xd6266a3f, 0xae9641fd,
+  0x4e89541b, 0x11953407, 0x53400d03, 0x8e0dd75a, 0xe5b53345, 0x108f19ad,
+  0x108b89bc, 0x41a4c954, 0xe03b2b63, 0x437b3d7f, 0x97aced8e, 0xcbd66670,
+  0x2c5508c2, 0x650ebc69, 0x5c4f2ef0, 0x904ff6bf, 0x9985a2df, 0x9faddd9e,
+  0x5ed8d239, 0x25585832, 0xe3e51cb9, 0x0ff4f1d4, 0x56c02d9a, 0x8c4ef804,
+  0xc1a08a13, 0x13fd01c8, 0xe6d27671, 0xa7c234f4, 0x9d0176cc, 0xd0d73df2,
+  0x4d8bfa89, 0x544f10cd, 0x2b17e0b2, 0xb70a5c7d, 0xfd86fe49, 0xdf373f41,
+  0x214495bb, 0x84e857fd, 0x00d313d5, 0x0496fcbe, 0xa4ba4744, 0xe8cac982,
+  0xaec29e6e, 0x87ec7038, 0x7000a519, 0xaeee333b, 0xff66e42c, 0x8afd6b25,
+  0x03b4f63b, 0xbd7991dc, 0x5ab8d9c7, 0x2ed4684e, 0x48741a6c, 0xaf06940d,
+  0x2fdc6349, 0xb03d7ecd, 0xe974996f, 0xac7867f9, 0x52ec8721, 0xbcdd9d4a,
+  0x8edd2d00, 0x3557de06, 0x41c759f8, 0x3956d4b9, 0xa75409f2, 0x123cd8a1,
+  0xb6100fab, 0x3e7b21e2, 0x2e8d623b, 0x92959da2, 0xbca35f77, 0x200c03a5,
+  0x35fcb457, 0x1bb6c6e4, 0xf74eb928, 0x3d5d0b54, 0x87cc1d21, 0x4964046f,
+  0x18ae4240, 0xd868b275, 0x8bd2b496, 0x1c5563f4, 0xc234d8f5, 0xf868e970,
+  0xf9151fff, 0xae7be4a2, 0x271133ee, 0xbb0fd922, 0x25254932, 0xa60a9fc0,
+  0x104bcd64, 0x30290145, 0x00000062,
+
+# define TENS_P13_IDX	(TENS_P12_IDX + TENS_P12_SIZE)
+# define TENS_P13_SIZE	853
+  [TENS_P13_IDX] = 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x64cf8001, 0x9f345226, 0x644963e5, 0x7b8d5053, 0x49f0aa29,
+  0xb945c82f, 0x430ff478, 0x933b6bb8, 0x5ff82d0a, 0x64c501d4, 0x73bbf174,
+  0x9ec1e1b3, 0x3bfbe803, 0xe9010689, 0xf7390d8e, 0x3fef8d80, 0xf31d1325,
+  0x2c73446b, 0xf5ca7a92, 0x1c19e379, 0x270af2be, 0xf52d9d9c, 0xeb2bed48,
+  0x3abf72e1, 0x4ac4ffc2, 0x7ecf3508, 0x22019a82, 0x38597a5a, 0xbe6a7b3c,
+  0x9a51ff6e, 0xa2d28437, 0x0c0abe9d, 0x7c9ec6ea, 0xc79887ff, 0x5851c899,
+  0x436420d0, 0xefead581, 0x72b5547f, 0x99b1d2b5, 0x077ad8f8, 0x5cddbf5b,
+  0x3b4305ed, 0xe3861ac7, 0x2d88f3fd, 0x3d6b43be, 0x393220aa, 0xe5382405,
+  0x1cd62095, 0x61a10c96, 0x87a0d1e1, 0xca95a55d, 0x68c933e6, 0x9ee082e2,
+  0x778089bb, 0x41429ee9, 0xfbb6d8d4, 0xc529500d, 0x26cf5471, 0x68b9be29,
+  0xd6c9b140, 0x07be635a, 0x84151852, 0xb5572182, 0x83730335, 0xeb2300b4,
+  0xdd312d31, 0x05d6dd9b, 0x488da59c, 0x37784d25, 0xda2c2e40, 0x6a8d92fa,
+  0x6a57d720, 0x950b41ac, 0xf07a8632, 0xcd55f062, 0x2ecad06a, 0xe6a3dfe7,
+  0x34c98bb0, 0x9c767d8f, 0xb60521b1, 0x752aafd1, 0xe87d16be, 0x9de1d728,
+  0xe58a8b0c, 0xc6013830, 0x2fa2c119, 0x3c4f9156, 0x519b40c8, 0x5058fc8f,
+  0xab78701b, 0xadc59c47, 0xc502a554, 0x0fb3286f, 0x6647f04c, 0x9db4076e,
+  0x5ea495c8, 0x9c74fab1, 0xb4f00f8b, 0x897c7a3c, 0xd092b4c6, 0x283e0340,
+  0x32f31fa8, 0xeeb708cc, 0x67b63de2, 0x4f7b3c8b, 0xef2bc02b, 0xda14bfe3,
+  0xc49344c0, 0xaabc85be, 0xb6c4e69e, 0x2ece8aa6, 0x63a11016, 0x19cfba4d,
+  0x726ae4d9, 0x0fc90b42, 0xee6ae707, 0x4290b04a, 0x4d9aabc5, 0xfb2b070e,
+  0xf34906cd, 0x1ff54b0a, 0x52ca9709, 0x0b42bfe1, 0x16431570, 0x980f3076,
+  0x6b5565bb, 0xeb8c4c4a, 0x9ce63c76, 0xb9e4c771, 0x3da24c53, 0x6f0266fa,
+  0xb50e3c66, 0x76e34f79, 0x01bb4b96, 0x9948cf3e, 0x0fbea124, 0x86bead12,
+  0xa1fa4edc, 0xd11e901c, 0xc3b97bf9, 0x71730e03, 0x370ca58e, 0x48b19715,
+  0x886467e2, 0xdb237497, 0x3c727e24, 0x2116ccd2, 0x8e67d76e, 0xf973aecf,
+  0x34bdedd3, 0x31d680ec, 0xb042ab05, 0x770e96a0, 0xfc5c3c17, 0xab6f1874,
+  0xb8204ece, 0x5843f3a5, 0x416c0ced, 0x11dd112f, 0x95780183, 0xb1c74bd8,
+  0x7e0e8613, 0x96c6453b, 0xa79ffc10, 0xb2157651, 0xfcd6da0a, 0x836a34a7,
+  0x3dd0ccac, 0x316e5a36, 0x496049ed, 0x0322bcb2, 0xdea1a97d, 0xcdf2aa5a,
+  0x39578d53, 0x1d1aa931, 0x030565c9, 0xd198cbed, 0x324e0a27, 0x5db83e8a,
+  0x28432534, 0x90bf23e8, 0x5cb134c0, 0xdd0adab6, 0x009e5051, 0xf8ad61da,
+  0x7e36a6d7, 0x84c75e57, 0xbdffe6aa, 0xb5d5532e, 0x138d680e, 0xbd84ddac,
+  0x4a5f74a1, 0xccff00d1, 0x55538cfa, 0xb0948b8c, 0x48528011, 0xe345f82e,
+  0x9e047ad7, 0x6ee770ff, 0xea77bef0, 0x0fc13669, 0x2f162567, 0x869426ac,
+  0x0614686c, 0x3a3ff464, 0x4263ed82, 0xb3589b47, 0x57205a7a, 0x213f24ad,
+  0xae6fc46b, 0x3de03e4e, 0xd92b133f, 0x315a589b, 0x1b49c24a, 0x73381bcb,
+  0x1641c138, 0x7bc99425, 0xbc680ada, 0xa5cfbc9a, 0x962e9884, 0x0a960d70,
+  0xfc8d12f6, 0xed18ef4c, 0x60acc868, 0x9aea5d14, 0x13113036, 0xc747c87e,
+  0x2d99a5b0, 0x3a369bb3, 0x006b3658, 0x118a5135, 0xe43fa6e6, 0xb4947190,
+  0xa13dc05e, 0xd7733db8, 0x0dbd7170, 0xc3fb67d1, 0x117ed7e7, 0xe2d72a49,
+  0xc05fe99e, 0x9638db40, 0xd971a25b, 0x4239d468, 0x1a159559, 0x850a223c,
+  0xc1117392, 0x22d2dbd8, 0x567b5fc0, 0x92c5b4eb, 0xc051007a, 0x11cc0099,
+  0xfb355720, 0x6907810d, 0x39848161, 0x5e8534f4, 0x61d19ef2, 0x2ee8c466,
+  0x8a0ab03c, 0xc234af76, 0x879aa514, 0x9774a235, 0x59e5da57, 0x9bc466b3,
+  0xf339bd5a, 0x44ab026d, 0xbbb5fd67, 0x2b977202, 0x3685c9f2, 0x03e5dc00,
+  0x7054359e, 0x5239cfb0, 0x9ba11f08, 0xf8237562, 0x9c258687, 0xa3b510dd,
+  0x52c7bf8f, 0xb31ed0cf, 0x3245e079, 0xff9ff8d3, 0xbaee38c7, 0xf17d5562,
+  0xf702b3b9, 0xcc4c8563, 0xcbca275d, 0xe005d9d1, 0xe817dbac, 0x05c6920a,
+  0x62cee350, 0x0f1deac0, 0x19e049b9, 0x59599f74, 0xb2a27a16, 0xf0911d5a,
+  0x7dcef00d, 0x3603dd66, 0x37552251, 0x97813735, 0x5fa022da, 0x0d849416,
+  0xefbe57c2, 0x30a0e592, 0x57619296, 0xc953cc47, 0x11735043, 0xa83526ad,
+  0xc0444be0, 0xb5f8463c, 0x16ff5136, 0x2a0a6631, 0xf037572c, 0xd30464da,
+  0xb1bf8daa, 0x7f5718f7, 0x0f3e9e7e, 0xe5a4cfe7, 0xc26f2624, 0x8c9b5ae4,
+  0xdfe8f485, 0xf6fa82e3, 0xc64a1509, 0xacb24aea, 0x3024b220, 0xddb02ac0,
+  0xddcdfedd, 0xd834c574, 0x384c86c3, 0xd904e099, 0xdd48a571, 0x4550a05f,
+  0x77b35c74, 0x81e85f71, 0xaaebdc6d, 0x0f9bb0b1, 0xd4cdc054, 0x7af4df85,
+  0x845786af, 0xe5e53887, 0xdf2a91ca, 0xf6a58211, 0x5689a3c4, 0x8cf6aa15,
+  0xa705983a, 0x9fbf2f52, 0x2ce7fef0, 0x48e84a62, 0x4a3b5365, 0xf8281a47,
+  0xd48a0872, 0x8423dcf6, 0xf0929c3e, 0x044a5049, 0xe9ec071b, 0x17decc36,
+  0x20e30c1b, 0x45fc2813, 0x3342196a, 0x46afb7f9, 0x6601e337, 0x30754439,
+  0xf18094d1, 0xd38b4112, 0x61410dd1, 0xd8796b36, 0xd97d4dd8, 0x47e9bc0b,
+  0x80805191, 0x1584e2da, 0xcde438c1, 0x955d24f1, 0x409659a1, 0x1b0950b1,
+  0x5a09635f, 0x65b1febe, 0x615472b9, 0x525dc00a, 0x6308e067, 0x4089e2d4,
+  0xd4e705a4, 0x43fc9209, 0x32c18b26, 0x4447a5fa, 0xaf271153, 0x3617cadc,
+  0x4dc4f0d2, 0x692eb386, 0x6aa116ef, 0x655991bc, 0x0641dc0b, 0x54469597,
+  0xc6559664, 0x749c0fe8, 0x4bdc0d1a, 0xa7d3381e, 0xc5292a61, 0x4eb65fdc,
+  0x42474cc2, 0xf2c6b173, 0x19dfc9ee, 0x0a19a199, 0xbece2ee3, 0xc68b778d,
+  0xaa03aa7c, 0xc8db86f0, 0xae54d2be, 0xb92a01e0, 0xdee3f48f, 0x6023c0a9,
+  0xf6ae2852, 0xa233763b, 0xa441cb9e, 0x3246dddd, 0x3a8bb4b7, 0x44faa3c3,
+  0x308ef2c8, 0xfd1c8516, 0xd2862534, 0x3b25ebe7, 0x62336f6f, 0x0c336a45,
+  0x0b8e2ce6, 0xe867f171, 0x11eea1f2, 0x523972ec, 0x68df4903, 0x50c05824,
+  0x51ef4cb7, 0xcb4df2a8, 0x3ffae115, 0xb51aca2f, 0x3ed1635f, 0xd6ff1cc6,
+  0x0a5ac09f, 0xde8ed9d6, 0x0a3dc76f, 0x5dc2d8dd, 0x37991dde, 0xf95bacb2,
+  0x80ad6e13, 0x163005ee, 0xd4f8c7a6, 0x3225d180, 0xa4760f08, 0x5fff004d,
+  0x9b2b1a87, 0xe7ea8576, 0x5cd00b66, 0xec478452, 0x285dd80d, 0x20112439,
+  0x4301b3a1, 0xff879fc8, 0xfacbb68c, 0xaf6af6b8, 0xb17fdf84, 0xc208d9f1,
+  0xf4489576, 0x8794a6e9, 0xadcc862c, 0x0e83e54c, 0x931685a4, 0xab01c580,
+  0x1e40293b, 0xcad784fa, 0x1f1ddf7f, 0x6b856084, 0xcee722b2, 0x1c39938b,
+  0x74254eb4, 0xc7ccebf4, 0xb9c26d9a, 0x6b08dfb9, 0x2e3ece24, 0x981455ec,
+  0xdff60410, 0xbc804e2b, 0xe06fa38b, 0xb534540c, 0x72e53c52, 0x02dfb2ef,
+  0xb2a5c05a, 0x5002a2a5, 0x97313338, 0x597c53ff, 0xd61df455, 0x34e5261a,
+  0x39ac2ec5, 0xc6bc0cab, 0x388b7539, 0x3f732fc0, 0x00eac704, 0x92fb21d9,
+  0xc089971e, 0xb4ffa503, 0x7af93f8f, 0x72e353b6, 0xa8311b23, 0x8266c9af,
+  0x1de496ca, 0xdbdb16b0, 0xd6fa0b51, 0x9991a5ef, 0xbd563089, 0x168cbe0f,
+  0x0954a1e3, 0x537b9245, 0x53d09723, 0x2867272d, 0x86558cb9, 0x0b83f026,
+  0xfac85d10, 0xf8562951, 0x1e5ddb95, 0xad3668c8, 0x48d27b92, 0xc930b7e6,
+  0x19b58a99, 0xa3de74e3, 0xa9cda917, 0xcb6e35ee, 0x7a4dd16e, 0x4c80e9d5,
+  0x4d84073f, 0x74a95ba8, 0x9cffcfc0, 0xd28485eb, 0x15796372, 0x5717e9cd,
+  0x77eda8df, 0xab473c4e, 0xadb965e1, 0xffad6959, 0x5bc05659, 0x6ed63880,
+  0xfb240227, 0x2014850b, 0xd15fdddf, 0xfdd74592, 0xb538f37d, 0x3a8e2e82,
+  0x1473396f, 0xf6a5edf8, 0x3ce41a21, 0x0cc4351a, 0x754e8264, 0xaab95e73,
+  0xc7821b96, 0xf42ff463, 0xc242faaa, 0xdd00ac65, 0x087e260e, 0x17d193f5,
+  0x0dbe0328, 0x844a63c9, 0xf9d10f96, 0x85aa91dd, 0xbaf127ec, 0x0ab6dabb,
+  0xce85e6a5, 0x1af5d24f, 0xe7b56a16, 0xcd6c5a19, 0x57d1d79f, 0x5dfc2b28,
+  0xec4dd2f0, 0x18fe64a1, 0x8d72216a, 0x5f222077, 0x72f14a08, 0xd8b09b11,
+  0x3bf038ab, 0xc6cf1f44, 0xc4265d7c, 0xdab1b0e7, 0x46398d2c, 0x7dcfdc68,
+  0xb6e705d3, 0x4aafd1e6, 0x362c1183, 0xd8701107, 0xf6ac98b7, 0xad114d7e,
+  0xd6649424, 0xc40ab551, 0xddd1c6e4, 0xa132030f, 0xc9d284c8, 0xdb1f662a,
+  0x824069ee, 0x4157904b, 0xc846b3ad, 0xd38481ca, 0x0a248c17, 0xc846831f,
+  0xe8745feb, 0x000025a8,
+
+# define TENS_P14_IDX	(TENS_P13_IDX + TENS_P13_SIZE)
+# define TENS_P14_SIZE	1703
+  [TENS_P14_IDX] = 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x099f0001,
+  0x41b5687d, 0xcbfd1b6e, 0x8c75ee63, 0x4b191cea, 0xd75296ad, 0x2394d80a,
+  0x1eb5da9b, 0x18a004ed, 0x5c79fed9, 0x37e3b01c, 0xed67a1b8, 0x78d9a714,
+  0x2a1a34d5, 0x8fbe7f0d, 0x6b1d3516, 0xe57c43ea, 0xa7825681, 0xc81d32e8,
+  0xd3e716e1, 0x58860b00, 0xa6d93d65, 0x83159c97, 0x0113232f, 0xd6122269,
+  0x7321c3a0, 0xbe6a92f3, 0xca4ca9d3, 0xd1e276a5, 0xc0e55163, 0xb05915d6,
+  0x7b7a78c1, 0x0fae0ca4, 0x62a3df4b, 0x08abec6f, 0x13030d11, 0xd446338a,
+  0x60dcc8f2, 0x5f05d1d5, 0x25e1f9f6, 0x04a40bee, 0x7f8c7113, 0x88f47ec0,
+  0x589ff59a, 0x308c3661, 0xea5068a1, 0x95fb108f, 0x06e87dff, 0x1559e741,
+  0xd4d4abdc, 0x01e092e4, 0xee16907c, 0x5a7b78e6, 0xe73aabcb, 0x146bb7e0,
+  0xad372889, 0x4f6b43c5, 0xfd49fc1d, 0x0f29f589, 0xd3739253, 0xc4745a56,
+  0xe2acfcc2, 0xd75ccbc7, 0xedd016cd, 0xac5a63e0, 0xef82ccd3, 0xb352496e,
+  0x2bdabfc4, 0x5b3d0401, 0x01b0197f, 0xade96d3c, 0x29d9253d, 0x19bebdba,
+  0x73c56b1b, 0x255e7b25, 0x1f2b7f1e, 0xa56a457e, 0x6299c836, 0x5c63cc78,
+  0xa2ca74c6, 0x5c85fe93, 0xee571bea, 0x508e2561, 0x2db5f1d0, 0xb1fde6a9,
+  0xa9b87b99, 0x4fb90a37, 0xf7260f07, 0xff58c5fd, 0x56ee7e97, 0xbab9fa46,
+  0x42e6f9ce, 0x78816f73, 0x1b76d267, 0xfdb2c728, 0x4566519c, 0xae17dd8d,
+  0xb9f6a95f, 0x1cd533a1, 0x67160dea, 0x14534bac, 0xfcd8f8f9, 0xf3f2901d,
+  0x708b1f0a, 0x8829063b, 0x9457a1df, 0x8f872aa1, 0x36bb9335, 0xb5672c0e,
+  0xd889d109, 0x7ec63a6a, 0x93306672, 0x39b6d457, 0x8239ab68, 0xef2e2506,
+  0xbe0d7a1f, 0x4251b635, 0x05f65522, 0x0ef0bd55, 0x03286891, 0x2c42b664,
+  0x9815fbac, 0x471fd611, 0x814e379c, 0x7dd8349d, 0xa4a25bda, 0x9886b84c,
+  0x01b9e39d, 0x5a7ce1a2, 0xae31cbc9, 0x86d07f32, 0x83ef8faf, 0xb66b5b76,
+  0x58470fdf, 0x96d59b73, 0x51618889, 0xdc400cf7, 0xfc8e0fc6, 0xaf693670,
+  0x09a08e56, 0x91737de6, 0x74f682e1, 0x0e03923f, 0x7f8ac56d, 0x7400cfd4,
+  0x8e05e49a, 0x4cebea3c, 0x384e1164, 0xb2e43d8c, 0xb50ae05e, 0x0f0b3ed9,
+  0xa4006123, 0x64137137, 0x4e9a1934, 0x05404100, 0xd9621be6, 0x9329a255,
+  0x5c347ebb, 0x75cbeb1b, 0xe684346b, 0x840fee55, 0xba6a9753, 0xf43836f6,
+  0x60505b7b, 0x334a9278, 0xfd6d475d, 0x5db94761, 0x267375aa, 0xc110e160,
+  0x024f6d63, 0x2ec96610, 0xa99b4c19, 0xb915c9f4, 0x338cfd90, 0xf02ea846,
+  0xb9e51a09, 0xae928fb1, 0xfae31d88, 0x1a3db721, 0x8475dd26, 0x5769489d,
+  0x7ad4c407, 0x0a49e9f0, 0x34e275c8, 0x3d075d83, 0x1d63114a, 0x72a96415,
+  0x6b98e947, 0x1d500b5f, 0xd50fdc36, 0x141e5085, 0x87751275, 0xe7843834,
+  0x2278809e, 0xb15c52ee, 0x947aead2, 0xfedb7b02, 0x5197b744, 0x64e09ba8,
+  0x8849d0a6, 0x23beaa85, 0x11ecb913, 0x0f7ed667, 0x5d984848, 0x9f6331ea,
+  0x588290e9, 0xa24d64d1, 0x7e09e9e5, 0x32592033, 0x03a501df, 0x27c270a6,
+  0xbb3df738, 0x3c7c5a70, 0x4190833c, 0x7d4bf9f4, 0x80e5d89b, 0xa7fc6194,
+  0xfaefb663, 0x62e52b49, 0xd3b6adcd, 0x809646fc, 0x1f2cf73a, 0xb765ed4f,
+  0x531e4bfb, 0x92cd05f2, 0xaf12d1a6, 0x22ee30f3, 0x38da1074, 0xed6447bb,
+  0x1a725608, 0xaff222d3, 0x7a3c6f54, 0xbca79a56, 0x7b0e8d12, 0x1c4660c5,
+  0x6e34d6fb, 0x6f481a9f, 0xfe9dc99c, 0xf888db82, 0xd8489ea0, 0x84b4c0fa,
+  0xc0dea281, 0x977a8583, 0xae30e887, 0x8c1cbcec, 0x1d4848cb, 0x0ee0d137,
+  0xd011b0fc, 0x94b5fd49, 0x478d7dd4, 0x3d67f2e7, 0xacab62ad, 0x0ab4e62a,
+  0x1dfc7df5, 0xd22e4553, 0x870b0e75, 0x49b7b001, 0x1b73bf6d, 0x12807ffd,
+  0xdc9f0737, 0x6f3e5852, 0xc0e2f250, 0x93e62e4a, 0x4d96a55a, 0xc1d0e185,
+  0x83a126db, 0x190b917b, 0xefbfd043, 0xc7df1669, 0x8f25b6dd, 0x2062eac9,
+  0x476c17a6, 0xcb60f278, 0x25460383, 0x0e85e996, 0xda8c05be, 0x6f678a34,
+  0x69206234, 0xf59be929, 0x1947b69a, 0x0ebfa11b, 0x90fd8322, 0x15c1e9bf,
+  0xd699b1ec, 0xb2f0343f, 0x7001d002, 0xcf76eaaa, 0xc0778ab5, 0x5173eda8,
+  0xb7b008e2, 0x4e00e4c6, 0x505d3f4d, 0x99dd341a, 0x1c9d4e12, 0x4ffb6978,
+  0x474c5e95, 0x6e9ca6dd, 0xda19f938, 0xe2dda6e0, 0x98dc318e, 0xda455e54,
+  0x3f67b836, 0x21e4181c, 0xa97e9a64, 0x1e17f655, 0x527a08bb, 0x1712dc21,
+  0x682972ad, 0x0042d256, 0xccbeadf1, 0xca497b96, 0x861e99e0, 0x0d8aa585,
+  0xeeb0f650, 0xdcc3c3da, 0x506af77e, 0x5deb9768, 0x7c9d60be, 0xe9d978b7,
+  0x37b37e95, 0x77ad0b94, 0x42747f75, 0x07be42c4, 0x6d5fd2fe, 0x4c8c5da9,
+  0x0d8fc27d, 0x0f2fd50f, 0x0ccf6023, 0x5b56053f, 0x3b1101bd, 0x56d34906,
+  0xc0feca27, 0x7602a150, 0xc4888da4, 0x419abe54, 0x56d10633, 0xc76120ed,
+  0x8db14123, 0xb656e675, 0x741e8f76, 0xd297b94e, 0x96be6f21, 0x3662439d,
+  0x9b409e27, 0x6626574d, 0x35fff92a, 0xbf558205, 0x69e02439, 0xbe6838b7,
+  0x6400fd4c, 0xa00f64ca, 0x1f4b158a, 0x9e2052ae, 0x04cca558, 0xfb5ee69e,
+  0x58da644c, 0x96f26e1f, 0x8ab19401, 0xbee1e16b, 0xed8bf908, 0x2f2809a4,
+  0xd50babab, 0x6e57f7e6, 0x6b0a8929, 0xf7356431, 0xb54a4cfc, 0x9a1d0ac4,
+  0x6f9fd6cb, 0x836bfbf8, 0x3b42f469, 0x8bd32129, 0x40111b6b, 0x7c278fb1,
+  0xb345d955, 0xff1fd188, 0xd32cd13c, 0xf7ec3aa0, 0x3789f792, 0xab707fa4,
+  0x4d79a4bf, 0xb3a28ceb, 0xd9c24d8e, 0x7134dadc, 0x06e2eb3e, 0xd7c04f76,
+  0xb379d811, 0x2b3b0ebc, 0x8c94fc33, 0xa28b53ab, 0xc06c5d01, 0xd900432a,
+  0x7fea91ca, 0x6d30b008, 0x64845f08, 0x796f5349, 0xfde4687d, 0xf888fe67,
+  0xe0046c56, 0xae482177, 0xce98cb11, 0x84590c46, 0x1feb4400, 0x6e1ba29b,
+  0xff2f1611, 0xf73f3e9c, 0x3159ca8c, 0x34845918, 0x56f0ed46, 0xb7d10c32,
+  0xd9a16a01, 0x405b9e91, 0x3cee3e24, 0x8739e4a6, 0x2ab396b4, 0x3f1b7871,
+  0x09835dfd, 0x8c7a489f, 0x1592b74a, 0x05df7c81, 0x0e8d3f37, 0xa61ff273,
+  0x68b29622, 0x259cd337, 0x43ff84a6, 0x81cf8fe9, 0x566ed883, 0x48427fc6,
+  0x35c79428, 0xcfd2fb59, 0xa97e8c8b, 0x750aaed8, 0x32ddca23, 0xaa8108ef,
+  0x96fbfff9, 0xa1d039aa, 0xe3cdf588, 0x47e77e00, 0xcd6b3fdb, 0xe72a9a80,
+  0x9a522152, 0xeda06283, 0xef175610, 0xa670cfa1, 0x339fe6c4, 0x2dfbf3ee,
+  0xc2d7f53b, 0x92a44e27, 0xcc47e4b0, 0xdfa212bc, 0xd64f83c9, 0x997e5475,
+  0xb51319bf, 0x9fffe599, 0x1fc2c7b6, 0xef5605e7, 0x832169dd, 0xfeb6be4e,
+  0xbf921dc8, 0x60bdfb1d, 0x72759f8d, 0x3546efa0, 0x020eebed, 0xcaab3d64,
+  0xdb20a2fe, 0xba1218f6, 0xb2b62bdd, 0x3101eff0, 0x8fde5cfa, 0x2e319213,
+  0xa52114d2, 0x87eead3f, 0xdf08b1dd, 0xa5387642, 0x746f34d0, 0xd76c4844,
+  0x4cc40317, 0xe4f689c9, 0xb7d76071, 0x5fe0b4a2, 0x6e1c7915, 0xc7d43f53,
+  0x3efb7d71, 0x068dd906, 0x35a75f5f, 0x652d7770, 0x750f4607, 0x64a1656c,
+  0x36c2cf8e, 0x214d758b, 0x9348ef93, 0xe4058978, 0x9674b7f3, 0x10570b0b,
+  0xbdfaba8f, 0xcef09dd7, 0xa92b261f, 0x071c21b6, 0xcbebb81f, 0xf427ed6c,
+  0x44228cd6, 0x65e56fcf, 0x5036c460, 0xad919def, 0xccfd848b, 0x61d158a6,
+  0x7527dca3, 0x4cf30459, 0x50855075, 0xa70dfd09, 0x3540f5aa, 0x35577adb,
+  0xb5ba3d4e, 0x35736c4f, 0xcdfb689f, 0xefe8fa82, 0x97ab0dca, 0x51bd2ff3,
+  0x77a7fe9c, 0x3107846c, 0x3d618b81, 0xbca797a4, 0xfc5e9651, 0xe2e08fbc,
+  0xf7e8791f, 0x772f1cc0, 0x7c426f9d, 0x08d56f88, 0x0080c3ab, 0x0deea663,
+  0xe6d46ec6, 0x7dca4eb7, 0x6b681d9d, 0xda06730b, 0x4af0e0f2, 0x038bf468,
+  0x52097463, 0xca19d302, 0xbc09bb9a, 0xaa55aeb1, 0x3ded4433, 0xf27938ba,
+  0x3e4b7865, 0x28296be7, 0x7ef96314, 0x7a1d55cc, 0xdf0b6b47, 0xcde11852,
+  0xcedda5bd, 0xf00a0eb3, 0x72ca1a8b, 0x5241b572, 0xb002fdcc, 0xff8898b3,
+  0xc4878862, 0xb3e85372, 0xbf4bca29, 0x7e1fef45, 0xf2d83189, 0x0f5427af,
+  0x3cdf9e05, 0x75bae885, 0xf65c06ac, 0x9c71a700, 0xa3145eac, 0xde63bab2,
+  0x76255bbf, 0x6e817be6, 0x4c6ad3d0, 0x25ab9935, 0xe95ef2f8, 0x11cd095a,
+  0xd54f78de, 0xa001ae7e, 0xb3829dcb, 0x5abd18bd, 0x18eb9c9e, 0xada3c504,
+  0xe3e3556c, 0xd35479aa, 0x5191ac5f, 0x221821ac, 0xc8d1d9d3, 0x313a8c51,
+  0x088c3fc8, 0xc146a264, 0xb154abed, 0x92755bc5, 0x349ec093, 0xf94aba57,
+  0x41d5886c, 0x0a5ad8b2, 0x36aba94b, 0x883a6758, 0xa9ad229f, 0x5d64069a,
+  0x0546172f, 0x0366da16, 0xc3808ea4, 0x0b172403, 0x70f0a235, 0xfa816e66,
+  0x4fceb827, 0xa65fcfea, 0x167b56d5, 0xfe2b9fb2, 0xfec36bcd, 0xa84c4cc9,
+  0xcd96320f, 0x3e128584, 0x09eda8b8, 0x91eca525, 0x7ec7e17b, 0xbc45bedc,
+  0xc14032f4, 0x9be689a7, 0x2eb20bc0, 0xffdf1efc, 0x14ef835f, 0xc6966c59,
+  0xcd778dd8, 0x5feb0f3b, 0x23d47715, 0xd64b87c8, 0x5722a550, 0x62883198,
+  0x315a1a8b, 0x648e17e6, 0x4b7e9d7a, 0x2ba43d28, 0x67caca84, 0x741f0398,
+  0x6e660159, 0x3e16e1a9, 0x3dde3c45, 0xa53e56ae, 0xc7eb0aef, 0x3f39f33e,
+  0x78751d73, 0x45816df8, 0x626770f7, 0xcb17d28d, 0x909e87f4, 0x93a86aba,
+  0xc1dcf328, 0x1a1e4ce2, 0xd895d042, 0xb9f6dd69, 0xbb00eaf5, 0xacc37687,
+  0xca609578, 0x5b490d39, 0xf8b86d4c, 0xf2737ef0, 0x39419f6d, 0x69267bc0,
+  0x72524a03, 0x6eb060c4, 0xdbc01e93, 0x291035b1, 0x83984d54, 0xf673ad85,
+  0xe08cbc20, 0x1fb24915, 0x584803a6, 0xe15bbcd7, 0x4088ddb5, 0xd4c22542,
+  0x2c18041a, 0xa51372d1, 0xb2ba69b4, 0x2299283f, 0xcd11c296, 0x25dcd6f3,
+  0xac54df23, 0x24a3a55e, 0x77e16e1d, 0xb3cd415b, 0xb99d85c0, 0x497befc7,
+  0xe91154e3, 0x7365cd8b, 0xb55100aa, 0x0ee699eb, 0xfc0927a6, 0xefb374de,
+  0x8acaa910, 0x83b40e3d, 0xda3f0006, 0x8590a089, 0xc6ce1b75, 0x54f6ff20,
+  0xfda2f7f3, 0xd2ab58f6, 0xd0763b6d, 0x6caf2515, 0x2519622d, 0xc3714057,
+  0x9863638f, 0xea00bb4f, 0x09ea4a4d, 0xe69de96d, 0x6b01fe5f, 0x960161a5,
+  0x529e32ec, 0xf8260ae9, 0x01a37eea, 0x69710577, 0x5aa0716f, 0xcb3fb1da,
+  0x4260feda, 0xa33fb790, 0x76012f75, 0x24c0e5be, 0x130f09ae, 0x2e8323dc,
+  0x5c8ecb76, 0x17cb8f12, 0x401b5f5c, 0x5f0a63e0, 0x47e1560a, 0xdc57a786,
+  0xee1377d4, 0x228e7ee5, 0x0aa294b9, 0xaea6c534, 0x55b0fe2f, 0x922d318a,
+  0xf108b772, 0xf15bddf6, 0xdfb69702, 0xcd438a4e, 0x90e1db66, 0x584ce4a1,
+  0x568ef6cb, 0x69e55f9d, 0x6da376ba, 0x5ca6c109, 0x45c7e294, 0xc977b3e9,
+  0xcf5b6c0c, 0x1d694499, 0x11b487ae, 0xcf8339ac, 0xbcb3cc6e, 0x50b828e0,
+  0x046b1071, 0x5703ed0d, 0x2c615946, 0x720d1610, 0xa908dbd0, 0x742bbe33,
+  0x22c076e2, 0x48966a66, 0x1d0cefa4, 0x1dde819f, 0x601352bf, 0xb9370c39,
+  0xa585cc4a, 0xeb857f94, 0x5a2f7206, 0x3fae6b58, 0x49cd0f1f, 0x78e5fb3d,
+  0x1b89d476, 0x74e9e65b, 0xed82945b, 0xb74e6483, 0x2941c4d9, 0x7e087acc,
+  0x565c18dc, 0x1a09f2e5, 0xbf4ccd3d, 0xd304e977, 0xa522631d, 0x6123378e,
+  0x4517109b, 0xb7e4285a, 0x4bf1a506, 0x625803c2, 0x683172f8, 0xc84e7354,
+  0x3f8a2b11, 0x7dd12b89, 0xed420491, 0x8c698b0b, 0x9853fb97, 0x9631777b,
+  0xb697e1c9, 0x5f028f05, 0x51038110, 0x9055f055, 0x30e255e3, 0xe2d0c1b6,
+  0xb990321e, 0xa8fdf4d1, 0xff4dc144, 0x521a3056, 0x148999e0, 0xa8111c66,
+  0xa9c96852, 0x8157f508, 0x4b394a94, 0xa0dc4df1, 0x94ec2e93, 0x6e6afa56,
+  0x8fc28377, 0xf72ffa04, 0xc435186f, 0xf91488b7, 0x8d037f6f, 0xa899ec1e,
+  0x48757727, 0x4101b612, 0xb8cf377d, 0xa5a54e68, 0xb4570569, 0x2ac5a0a0,
+  0x063d9cfd, 0x7c504c74, 0xf1a5884c, 0x0a9b1955, 0x8d0b91bf, 0xe5f6862f,
+  0x79ff5361, 0x0ed3d38f, 0xc6fd31fb, 0x9fe131c7, 0x85b9c648, 0x8febf2b4,
+  0x8e77e86b, 0x992ba80e, 0x56429986, 0x6848879a, 0x608cdda5, 0x3e0d106e,
+  0x754b300e, 0x25200576, 0xafd5195b, 0x5d37aad9, 0xe81f0939, 0xe00a390e,
+  0xdeeea20a, 0xf5fef0be, 0xb5d51155, 0x6e27d173, 0x9e72ebcf, 0xb776e978,
+  0xb966f7ba, 0x09520238, 0x726c8408, 0x3347ebc5, 0x65dce5a2, 0x3ec78337,
+  0x8c92d740, 0x3cdde3fe, 0x32caec93, 0xd20379ae, 0x411be811, 0x41756580,
+  0x72fa1bbd, 0xa92125b3, 0x84c42f04, 0xdd4ee5fe, 0x3a25922c, 0x96446853,
+  0x49ad3be0, 0x2880366d, 0x1c841afe, 0xf1e09019, 0xfb905fe1, 0xa451ad59,
+  0x3ba9d0c9, 0x56db2e9c, 0xa42419f2, 0xe921e7a0, 0x3c9a3ca5, 0xad8ea375,
+  0xcec7d091, 0x99bdb940, 0x477ef58f, 0x8a4933c7, 0xb2598b8d, 0xf5659df7,
+  0xcfac1e1c, 0x339f8748, 0xe2a04aab, 0xe122b03f, 0x45bc6f37, 0xc9feeb30,
+  0x9c75aaa0, 0xc13c174e, 0x0ea0585d, 0xdc58bbb4, 0x3a96bd5a, 0x20251482,
+  0x3c7a714d, 0x696897eb, 0x6cb83b6b, 0xa37de406, 0x3b496b5f, 0x37e75d6a,
+  0x380dd382, 0x0e1a513c, 0xda26fac9, 0xf2458364, 0x12b5c6ea, 0x79ce9e47,
+  0x1ff1fcbf, 0xbe7c6e86, 0x59a6a7ba, 0x8d70f515, 0x94761453, 0x6b04e425,
+  0x8768ffb2, 0x1ca5f425, 0x3f9e8407, 0x3b641184, 0x5f8f6756, 0x62b1a5a5,
+  0x56bc2120, 0xd1e5da68, 0x17f2fa18, 0x8cce5e2d, 0xa1bc9c06, 0x8e290fb1,
+  0x892df1af, 0xad10b8c8, 0xb43e5517, 0xd0597409, 0x4407c38f, 0x4a020d81,
+  0xfea9c9b6, 0xd8e0e7d6, 0xd5b2aaf9, 0xde5e9b40, 0xda44ed4a, 0x45d6bf41,
+  0x87aa3ca0, 0xc62d12fc, 0x4708acc8, 0x10212e26, 0x0d1227ff, 0xfeeb5742,
+  0x5da02550, 0xd66668e7, 0x1d56e5e1, 0x32c215ec, 0xae1e0bef, 0x7f048b7e,
+  0x58c0e922, 0x2aea8619, 0x58251aac, 0xbbe10425, 0xa1fea536, 0x2e1d9667,
+  0xd233eb7d, 0xcf435c0b, 0xb0693c67, 0x61d918ea, 0x903ec9f0, 0xd6c4e8ac,
+  0x0efb1788, 0xb0098f5b, 0x1709d878, 0x3c12b35e, 0x3f6ce1b7, 0xa1b3ff54,
+  0x8a8f7dbb, 0x37608d6a, 0x73e8563e, 0xa3330540, 0x64e00749, 0xebbfcab9,
+  0x8d5caaf9, 0x3bc87c7e, 0xedb2bd94, 0x22f8f62d, 0xe656dec3, 0xc5683222,
+  0x670c1626, 0x94089e7f, 0x4237542f, 0x47d29440, 0x2fc4e530, 0x8419441e,
+  0x8b288dac, 0x7f9245f9, 0xa7afb4e9, 0x8a15650d, 0x082adef7, 0x3104ef19,
+  0x043c62de, 0x0aff3dc5, 0x7ecd0635, 0xe7e80a8b, 0xe0600fad, 0x4d8e81cc,
+  0x81ebf4e0, 0xf587e30f, 0x7b372af7, 0x2d8f8ca0, 0xdee11c6f, 0xd3624b1c,
+  0xf8adc426, 0xca9debed, 0x5c22de4f, 0x3634f778, 0xfae3186b, 0xacf8b595,
+  0xd7bfa75f, 0x003cd316, 0xbbfe3cf6, 0xb023cb50, 0xc51055a1, 0x0063cffd,
+  0x93869a77, 0x51e022d4, 0xfbceeb10, 0x5187457e, 0x109defc9, 0x673892d8,
+  0xe13cfde2, 0xd4aa3272, 0xc09c8134, 0xbf89ad5b, 0x0327181b, 0x09511ec7,
+  0xaa21b632, 0xd7e72186, 0xe41885b5, 0x46713f9c, 0x493d2789, 0x1386c526,
+  0xd5d22a5c, 0xcefddfc4, 0xcf59281c, 0x92973ea6, 0x4ebe43f6, 0xeac5c6ad,
+  0x6cf4897d, 0xd95082a0, 0x82ce562a, 0x28e5e9bd, 0x28d8f0db, 0xddf06e81,
+  0x707b0166, 0x7dae3f00, 0xfbf5756a, 0x035a4680, 0x4f114102, 0xe7ba4b33,
+  0x5190fedf, 0x106a7594, 0xe5f1bc49, 0xaae3ad67, 0xd7a1a766, 0x040ee971,
+  0x9120a214, 0xf415b374, 0x1edc87ea, 0x17aab43c, 0xc6ad637d, 0x885858c1,
+  0xd90303c7, 0xbfd4b70b, 0x3ff4eb0e, 0x344a9a88, 0xd81eea30, 0x95925446,
+  0x5adef0ec, 0xabb5f5e7, 0x20bbd8c3, 0xc1c22cce, 0xe6944262, 0xc5acdb23,
+  0x80024021, 0x2232c635, 0x94b30c81, 0x55f07648, 0x78569acd, 0x9696ea39,
+  0x4dd6b528, 0x1c3e1b40, 0xde5853b3, 0x8a2c3679, 0x6eb5a7d8, 0x56bda89a,
+  0x8f9cf096, 0xfda86d5b, 0x6481c7e7, 0x50a6a7d5, 0x15bfb45d, 0x4f9a5381,
+  0xc057d45d, 0x4fb10024, 0xa0009f00, 0x5e1ca0dd, 0xac420f74, 0xcfbb38bd,
+  0xf0d4a615, 0x19bf0318, 0x0e3aef84, 0xcb3d7b20, 0x166c1e3e, 0x58272fdd,
+  0x3bfacf9f, 0xc0f5ce46, 0x63a13528, 0xea59e333, 0xa020ca8c, 0xaadd116b,
+  0x3dbb5a3d, 0xe5523f47, 0x747f55ea, 0x0922171e, 0x64d520fb, 0x6c709e84,
+  0x07ce951b, 0x35fdc402, 0x7508eb6d, 0xc495a8fa, 0xb0d11c39, 0x81313d65,
+  0x57447ef0, 0xa7b61e26, 0xf72301f3, 0xbb096315, 0x45a3a7c5, 0xa903a44b,
+  0x00432f88, 0x19081987, 0xeb4e1b66, 0xbb7b66bd, 0x6d245171, 0xde4182f5,
+  0x0d89bd0b, 0x87f4de6c, 0xf70d8a60, 0x9a87855b, 0x08a27449, 0x4ac7720a,
+  0xd4964017, 0xb0d9ddac, 0x4db3488c, 0xfe397d44, 0xd07b745b, 0x197dcb7b,
+  0x6e9d567d, 0xe3b90812, 0x9143fef1, 0xb9e002ac, 0x115ff96d, 0xf60a2201,
+  0x5b61c9c8, 0x09abab2f, 0xb14a44a7, 0x0ca19c73, 0x843c7997, 0xe3a9bbe6,
+  0x5e3fc18c, 0x0c0404ee, 0x764df59d, 0x990ec2c2, 0x4ad0ba3c, 0x05e8be0f,
+  0xe599647d, 0xc19d365d, 0x4d0c2990, 0xe5a9d9ac, 0xb680a72d, 0x4ce2e5dd,
+  0x6d6c0267, 0x06f9c25b, 0xbd6078e0, 0xb5fcdc81, 0xd742fa41, 0xcccc2399,
+  0xc691adc0, 0x215ad82c, 0xea73b0c3, 0xa511e5b0, 0xf499e0a6, 0x53e27ab0,
+  0xd94440a2, 0x47752521, 0x9a6e3644, 0xab113708, 0x8f8b301d, 0x058a42a3,
+#endif	/* FPIOCONST_HAVE_EXTENDED_RANGE */
+};
+
+#elif BITS_PER_MP_LIMB == 64
+
+/* Table with constants of 10^(2^i), i=0..12 for 64-bit limbs.	*/
+
+const mp_limb_t __tens[] =
+{
+#define TENS_P0_IDX	0
+#define TENS_P0_SIZE	2
+  [TENS_P0_IDX] = 0x0000000000000000ull, 0x000000000000000aull,
+
+#define TENS_P1_IDX	(TENS_P0_IDX + TENS_P0_SIZE)
+#define TENS_P1_SIZE	2
+  [TENS_P1_IDX] = 0x0000000000000000ull, 0x0000000000000064ull,
+
+#define TENS_P2_IDX	(TENS_P1_IDX + TENS_P1_SIZE)
+#define TENS_P2_SIZE	2
+  [TENS_P2_IDX] = 0x0000000000000000ull, 0x0000000000002710ull,
+
+#define TENS_P3_IDX	(TENS_P2_IDX + TENS_P2_SIZE)
+#define TENS_P3_SIZE	2
+  [TENS_P3_IDX] = 0x0000000000000000ull, 0x0000000005f5e100ull,
+
+#define TENS_P4_IDX	(TENS_P3_IDX + TENS_P3_SIZE)
+#define TENS_P4_SIZE	2
+  [TENS_P4_IDX] = 0x0000000000000000ull, 0x002386f26fc10000ull,
+
+#define TENS_P5_IDX	(TENS_P4_IDX + TENS_P4_SIZE)
+#define TENS_P5_SIZE	3
+  [TENS_P5_IDX] = 0x0000000000000000ull, 0x85acef8100000000ull,
+  0x000004ee2d6d415bull,
+
+#define TENS_P6_IDX	(TENS_P5_IDX + TENS_P5_SIZE)
+#define TENS_P6_SIZE	5
+  [TENS_P6_IDX] = 0x0000000000000000ull, 0x0000000000000000ull,
+  0x6e38ed64bf6a1f01ull, 0xe93ff9f4daa797edull, 0x0000000000184f03ull,
+
+#define TENS_P7_IDX	(TENS_P6_IDX + TENS_P6_SIZE)
+#define TENS_P7_SIZE	8
+  [TENS_P7_IDX] = 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x03df99092e953e01ull, 0x2374e42f0f1538fdull,
+  0xc404dc08d3cff5ecull, 0xa6337f19bccdb0daull, 0x0000024ee91f2603ull,
+
+#define TENS_P8_IDX	(TENS_P7_IDX + TENS_P7_SIZE)
+#define TENS_P8_SIZE	15
+  [TENS_P8_IDX] = 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0xbed3875b982e7c01ull, 0x12152f87d8d99f72ull, 0xcf4a6e706bde50c6ull,
+  0x26b2716ed595d80full, 0x1d153624adc666b0ull, 0x63ff540e3c42d35aull,
+  0x65f9ef17cc5573c0ull, 0x80dcc7f755bc28f2ull, 0x5fdcefcef46eeddcull,
+  0x00000000000553f7ull,
+
+#define TENS_P9_IDX	(TENS_P8_IDX + TENS_P8_SIZE)
+#define TENS_P9_SIZE	28
+  [TENS_P9_IDX] = 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x77f27267fc6cf801ull, 0x5d96976f8f9546dcull,
+  0xc31e1ad9b83a8a97ull, 0x94e6574746c40513ull, 0x4475b579c88976c1ull,
+  0xaa1da1bf28f8733bull, 0x1e25cfea703ed321ull, 0xbc51fb2eb21a2f22ull,
+  0xbfa3edac96e14f5dull, 0xe7fc7153329c57aeull, 0x85a91924c3fc0695ull,
+  0xb2908ee0f95f635eull, 0x1366732a93abade4ull, 0x69be5b0e9449775cull,
+  0xb099bc817343afacull, 0xa269974845a71d46ull, 0x8a0b1f138cb07303ull,
+  0xc1d238d98cab8a97ull, 0x0000001c633415d4ull,
+
+#define TENS_P10_IDX	(TENS_P9_IDX + TENS_P9_SIZE)
+#define TENS_P10_SIZE	55
+  [TENS_P10_IDX] = 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0xf55b2b722919f001ull, 0x1ec29f866e7c215bull, 0x15c51a88991c4e87ull,
+  0x4c7d1e1a140ac535ull, 0x0ed1440ecc2cd819ull, 0x7de16cfb896634eeull,
+  0x9fce837d1e43f61full, 0x233e55c7231d2b9cull, 0xf451218b65dc60d7ull,
+  0xc96359861c5cd134ull, 0xa7e89431922bbb9full, 0x62be695a9f9f2a07ull,
+  0x045b7a748e1042c4ull, 0x8ad822a51abe1de3ull, 0xd814b505ba34c411ull,
+  0x8fc51a16bf3fdeb3ull, 0xf56deeecb1b896bcull, 0xb6f4654b31fb6bfdull,
+  0x6b7595fb101a3616ull, 0x80d98089dc1a47feull, 0x9a20288280bda5a5ull,
+  0xfc8f1f9031eb0f66ull, 0xe26a7b7e976a3310ull, 0x3ce3a0b8df68368aull,
+  0x75a351a28e4262ceull, 0x445975836cb0b6c9ull, 0xc356e38a31b5653full,
+  0x0190fba035faaba6ull, 0x88bc491b9fc4ed52ull, 0x005b80411640114aull,
+  0x1e8d4649f4f3235eull, 0x73c5534936a8de06ull, 0xc1a6970ca7e6bd2aull,
+  0xd2db49ef47187094ull, 0xae6209d4926c3f5bull, 0x34f4a3c62d433949ull,
+  0xd9d61a05d4305d94ull, 0x0000000000000325ull,
+
+#if FPIOCONST_HAVE_EXTENDED_RANGE
+# define TENS_P11_IDX	(TENS_P10_IDX + TENS_P10_SIZE)
+# define TENS_P11_SIZE	108
+  [TENS_P11_IDX] = 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0xe30968651333e001ull, 0x49e28dcfb27d4d3full,
+  0xee87e354ec2e4721ull, 0x368b8abbb6067584ull, 0x2ed56d55a5e5a191ull,
+  0xea50d142fd827773ull, 0x98342c9e51b78db2ull, 0x866ed6f1c850dabcull,
+  0x9279498719342c12ull, 0x66912e4ad2f869c2ull, 0x57a7842d71c7fd8full,
+  0xfb7fedcc235552ebull, 0x38209ce1f3861ce0ull, 0x34c101349713b449ull,
+  0xa7a8289c8c6c54deull, 0xe3cb64f32dbb6643ull, 0xe3892ee98074ff01ull,
+  0xa8f16f9210c17f94ull, 0x967abbb3a8281ed6ull, 0x9952fbed5a151440ull,
+  0xafe609c313b41e44ull, 0xf111821fa2bca416ull, 0x91bac974fb1264b4ull,
+  0x8e48ff35d6c7d6abull, 0xc4a656654419bd43ull, 0x33554c36685e5510ull,
+  0x0dbd21feab498697ull, 0x982da4663cfe491dull, 0x9e110c7bcbea4ca7ull,
+  0x5fc5a04779c56b8aull, 0x1aa9f44484d80e2eull, 0x6a57b1ab730f203cull,
+  0x87a7dc62d752f7a6ull, 0x40660460944545ffull, 0xc9ac375d77c1a42full,
+  0x744695f0e866d7efull, 0xa1fc6b9681428c85ull, 0x7bf03c19d7917c7bull,
+  0x5715f7915b33eb41ull, 0xdb0708fd8f6cae5full, 0x785ce6b7b125ac8eull,
+  0x6f46eadb56c6815bull, 0x195355d84eeebeeeull, 0x9d7389c0a244de3cull,
+  0xcf99d01953761abdull, 0x0d76ce39de9ec24bull, 0x2e55ecee70beb181ull,
+  0xf56d9d4bd5f86079ull, 0x13ef5a83fb8886fbull, 0x3f3389a4408f43c5ull,
+  0x58ccf45cfad37943ull, 0x415c7f3ef82df846ull, 0x8b3d5cf42915e818ull,
+  0xf8dbb57a6a445f27ull, 0x8ad803ecca8f0070ull, 0x038f9245b2e87c34ull,
+  0xc7c9dee0bedd8a6cull, 0x2ad3fa140eac7d56ull, 0xf775677ce0de0840ull,
+  0x92be221ef1bd0ad5ull, 0xce9d04a487fa1fb9ull, 0x3f6f7024d2c36fa9ull,
+  0x907855eeb028af62ull, 0x4efac5dcd83e49d6ull, 0x77cd8c6be7151aabull,
+  0x0af908b40a753b7dull, 0xe50f30278c983623ull, 0x1d08e2d694222771ull,
+  0xf2ee5ca6f7e928e6ull, 0x11eb962b1b61b93cull, 0xce2bcba19648b21cull,
+  0x7bbebe3034f77154ull, 0x8ce329ace526a319ull, 0xb5dc53d5de4a74d2ull,
+  0x000000000009e8b3ull,
+
+# define TENS_P12_IDX	(TENS_P11_IDX + TENS_P11_SIZE)
+# define TENS_P12_SIZE	214
+  [TENS_P12_IDX] = 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0xd4724e8d2a67c001ull, 0xf89a1e908efe7ae7ull, 0x54e05154ef084117ull,
+  0x506be82913b1bb51ull, 0xe599574efb29b172ull, 0x806c0ed3f0da6146ull,
+  0x45155e93b86ae5beull, 0x7e1e7c34c0591cc2ull, 0x1d1f4cce7c4823daull,
+  0xd6bfdf759b8ba1e8ull, 0xc2dfae78e341be10ull, 0x0f237f1a016b67b2ull,
+  0xaf6a25743dbeabcdull, 0x142e0e80cab3e6d7ull, 0x2c23481161959127ull,
+  0xcb4bf98287009701ull, 0x88052f8cf8169c84ull, 0xbc13176168dde6d4ull,
+  0x54ab9c41ff0b0905ull, 0x1a1c304e7613b224ull, 0x441c2d473bfe167bull,
+  0x78f061814f6cea9cull, 0x30c7ae41eb659fb8ull, 0xa1ebcad7947e0d0eull,
+  0x2130504dd97d9556ull, 0xf2acd5071a8309cbull, 0xfd82373a3f8ec72aull,
+  0x280f4d3295a842bcull, 0x811a4f04f3618ac0ull, 0xd3967a1b6dc3a5b4ull,
+  0xdcfe388f15b8c898ull, 0x8738b909454eb2a0ull, 0x2bd9cc1110c4e996ull,
+  0x655fec303297cd0cull, 0xf4090ee8ae0725b1ull, 0x398c6fed037d19eeull,
+  0xc994a4503b9af26bull, 0x75a697b2b5341743ull, 0x3ccb5b92ac50b9c1ull,
+  0xa8329761ffe06205ull, 0xeb83cadbdfea5242ull, 0x3c20ee69e79dadf7ull,
+  0x7021b97a1e0a6817ull, 0x176ca776743074faull, 0xeca19beb77fb8af6ull,
+  0xaf63b71292baf1deull, 0xa4eb8f8cde35c88bull, 0x40b464a0e137d5e9ull,
+  0x42923bbd87d1cde8ull, 0x2e2690f3cd8f62ffull, 0x59c89f1b095edc16ull,
+  0x5138753d1fa8fd5dull, 0x80152f18390a2b29ull, 0xf984d83e2dd8d925ull,
+  0xc19e1faf7a872e74ull, 0xecf9b5d0ed4d542dull, 0xc53c0adf9462ea75ull,
+  0x37a2d4390caea134ull, 0x2181327ec8fa2e8aull, 0x2d2408206e7bb827ull,
+  0x5893d4b850be10e0ull, 0x1f2b2322ab312bb9ull, 0xbf627ede440b3f25ull,
+  0xb608b89572dac789ull, 0x86deb3f078787e2aull, 0xbb9373f46fee7aabull,
+  0xf7d8b57e27ecf57bull, 0x3d04e8d2fca26a9full, 0x3172826ac9df13cbull,
+  0xa8fcd8e0cd9e8d7cull, 0x307641d9b2c39497ull, 0x2608c4cf1cc939c1ull,
+  0x3d326a7eb6d1c7bfull, 0x8e13e25feeaf19e6ull, 0x2dfe6d97ee63302bull,
+  0xe41d3cc425971d58ull, 0xab8db59a0a80627cull, 0xe90afb779eea37c8ull,
+  0x9ee3352c90ca19cfull, 0xfe78d6823613c850ull, 0x5b060904788f6e50ull,
+  0x3fecb534b71bd1a4ull, 0x20c33857b32c450cull, 0x0239f4cea6e9cfdaull,
+  0xa19adb9548497187ull, 0x95aca6a8b492ed8aull, 0xcf1b23504dcd6cd9ull,
+  0x1a67778cfbe8b12aull, 0xc32da38338eb3accull, 0xa03f40a8fb126ab1ull,
+  0xe9ce4724ed5bf546ull, 0x73a130d84c4a74fdull, 0xa2ebd6c1d9960e2dull,
+  0x6f233b7c94ab6febull, 0x8e7b9a7349126080ull, 0xd298f9994b8c9091ull,
+  0xa96ddeff35e836b5ull, 0x6b0dd9bc96119b31ull, 0x282566fbc6cc3f8dull,
+  0xd6769f3b72b882e7ull, 0x00fc509ba674343dull, 0xd6266a3fdcbf7789ull,
+  0x4e89541bae9641fdull, 0x53400d0311953407ull, 0xe5b533458e0dd75aull,
+  0x108b89bc108f19adull, 0xe03b2b6341a4c954ull, 0x97aced8e437b3d7full,
+  0x2c5508c2cbd66670ull, 0x5c4f2ef0650ebc69ull, 0x9985a2df904ff6bfull,
+  0x5ed8d2399faddd9eull, 0xe3e51cb925585832ull, 0x56c02d9a0ff4f1d4ull,
+  0xc1a08a138c4ef804ull, 0xe6d2767113fd01c8ull, 0x9d0176cca7c234f4ull,
+  0x4d8bfa89d0d73df2ull, 0x2b17e0b2544f10cdull, 0xfd86fe49b70a5c7dull,
+  0x214495bbdf373f41ull, 0x00d313d584e857fdull, 0xa4ba47440496fcbeull,
+  0xaec29e6ee8cac982ull, 0x7000a51987ec7038ull, 0xff66e42caeee333bull,
+  0x03b4f63b8afd6b25ull, 0x5ab8d9c7bd7991dcull, 0x48741a6c2ed4684eull,
+  0x2fdc6349af06940dull, 0xe974996fb03d7ecdull, 0x52ec8721ac7867f9ull,
+  0x8edd2d00bcdd9d4aull, 0x41c759f83557de06ull, 0xa75409f23956d4b9ull,
+  0xb6100fab123cd8a1ull, 0x2e8d623b3e7b21e2ull, 0xbca35f7792959da2ull,
+  0x35fcb457200c03a5ull, 0xf74eb9281bb6c6e4ull, 0x87cc1d213d5d0b54ull,
+  0x18ae42404964046full, 0x8bd2b496d868b275ull, 0xc234d8f51c5563f4ull,
+  0xf9151ffff868e970ull, 0x271133eeae7be4a2ull, 0x25254932bb0fd922ull,
+  0x104bcd64a60a9fc0ull, 0x0000006230290145ull,
+
+# define TENS_P13_IDX	(TENS_P12_IDX + TENS_P12_SIZE)
+# define TENS_P13_SIZE	427
+  [TENS_P13_IDX] = 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x9f34522664cf8001ull, 0x7b8d5053644963e5ull,
+  0xb945c82f49f0aa29ull, 0x933b6bb8430ff478ull, 0x64c501d45ff82d0aull,
+  0x9ec1e1b373bbf174ull, 0xe90106893bfbe803ull, 0x3fef8d80f7390d8eull,
+  0x2c73446bf31d1325ull, 0x1c19e379f5ca7a92ull, 0xf52d9d9c270af2beull,
+  0x3abf72e1eb2bed48ull, 0x7ecf35084ac4ffc2ull, 0x38597a5a22019a82ull,
+  0x9a51ff6ebe6a7b3cull, 0x0c0abe9da2d28437ull, 0xc79887ff7c9ec6eaull,
+  0x436420d05851c899ull, 0x72b5547fefead581ull, 0x077ad8f899b1d2b5ull,
+  0x3b4305ed5cddbf5bull, 0x2d88f3fde3861ac7ull, 0x393220aa3d6b43beull,
+  0x1cd62095e5382405ull, 0x87a0d1e161a10c96ull, 0x68c933e6ca95a55dull,
+  0x778089bb9ee082e2ull, 0xfbb6d8d441429ee9ull, 0x26cf5471c529500dull,
+  0xd6c9b14068b9be29ull, 0x8415185207be635aull, 0x83730335b5572182ull,
+  0xdd312d31eb2300b4ull, 0x488da59c05d6dd9bull, 0xda2c2e4037784d25ull,
+  0x6a57d7206a8d92faull, 0xf07a8632950b41acull, 0x2ecad06acd55f062ull,
+  0x34c98bb0e6a3dfe7ull, 0xb60521b19c767d8full, 0xe87d16be752aafd1ull,
+  0xe58a8b0c9de1d728ull, 0x2fa2c119c6013830ull, 0x519b40c83c4f9156ull,
+  0xab78701b5058fc8full, 0xc502a554adc59c47ull, 0x6647f04c0fb3286full,
+  0x5ea495c89db4076eull, 0xb4f00f8b9c74fab1ull, 0xd092b4c6897c7a3cull,
+  0x32f31fa8283e0340ull, 0x67b63de2eeb708ccull, 0xef2bc02b4f7b3c8bull,
+  0xc49344c0da14bfe3ull, 0xb6c4e69eaabc85beull, 0x63a110162ece8aa6ull,
+  0x726ae4d919cfba4dull, 0xee6ae7070fc90b42ull, 0x4d9aabc54290b04aull,
+  0xf34906cdfb2b070eull, 0x52ca97091ff54b0aull, 0x164315700b42bfe1ull,
+  0x6b5565bb980f3076ull, 0x9ce63c76eb8c4c4aull, 0x3da24c53b9e4c771ull,
+  0xb50e3c666f0266faull, 0x01bb4b9676e34f79ull, 0x0fbea1249948cf3eull,
+  0xa1fa4edc86bead12ull, 0xc3b97bf9d11e901cull, 0x370ca58e71730e03ull,
+  0x886467e248b19715ull, 0x3c727e24db237497ull, 0x8e67d76e2116ccd2ull,
+  0x34bdedd3f973aecfull, 0xb042ab0531d680ecull, 0xfc5c3c17770e96a0ull,
+  0xb8204eceab6f1874ull, 0x416c0ced5843f3a5ull, 0x9578018311dd112full,
+  0x7e0e8613b1c74bd8ull, 0xa79ffc1096c6453bull, 0xfcd6da0ab2157651ull,
+  0x3dd0ccac836a34a7ull, 0x496049ed316e5a36ull, 0xdea1a97d0322bcb2ull,
+  0x39578d53cdf2aa5aull, 0x030565c91d1aa931ull, 0x324e0a27d198cbedull,
+  0x284325345db83e8aull, 0x5cb134c090bf23e8ull, 0x009e5051dd0adab6ull,
+  0x7e36a6d7f8ad61daull, 0xbdffe6aa84c75e57ull, 0x138d680eb5d5532eull,
+  0x4a5f74a1bd84ddacull, 0x55538cfaccff00d1ull, 0x48528011b0948b8cull,
+  0x9e047ad7e345f82eull, 0xea77bef06ee770ffull, 0x2f1625670fc13669ull,
+  0x0614686c869426acull, 0x4263ed823a3ff464ull, 0x57205a7ab3589b47ull,
+  0xae6fc46b213f24adull, 0xd92b133f3de03e4eull, 0x1b49c24a315a589bull,
+  0x1641c13873381bcbull, 0xbc680ada7bc99425ull, 0x962e9884a5cfbc9aull,
+  0xfc8d12f60a960d70ull, 0x60acc868ed18ef4cull, 0x131130369aea5d14ull,
+  0x2d99a5b0c747c87eull, 0x006b36583a369bb3ull, 0xe43fa6e6118a5135ull,
+  0xa13dc05eb4947190ull, 0x0dbd7170d7733db8ull, 0x117ed7e7c3fb67d1ull,
+  0xc05fe99ee2d72a49ull, 0xd971a25b9638db40ull, 0x1a1595594239d468ull,
+  0xc1117392850a223cull, 0x567b5fc022d2dbd8ull, 0xc051007a92c5b4ebull,
+  0xfb35572011cc0099ull, 0x398481616907810dull, 0x61d19ef25e8534f4ull,
+  0x8a0ab03c2ee8c466ull, 0x879aa514c234af76ull, 0x59e5da579774a235ull,
+  0xf339bd5a9bc466b3ull, 0xbbb5fd6744ab026dull, 0x3685c9f22b977202ull,
+  0x7054359e03e5dc00ull, 0x9ba11f085239cfb0ull, 0x9c258687f8237562ull,
+  0x52c7bf8fa3b510ddull, 0x3245e079b31ed0cfull, 0xbaee38c7ff9ff8d3ull,
+  0xf702b3b9f17d5562ull, 0xcbca275dcc4c8563ull, 0xe817dbace005d9d1ull,
+  0x62cee35005c6920aull, 0x19e049b90f1deac0ull, 0xb2a27a1659599f74ull,
+  0x7dcef00df0911d5aull, 0x375522513603dd66ull, 0x5fa022da97813735ull,
+  0xefbe57c20d849416ull, 0x5761929630a0e592ull, 0x11735043c953cc47ull,
+  0xc0444be0a83526adull, 0x16ff5136b5f8463cull, 0xf037572c2a0a6631ull,
+  0xb1bf8daad30464daull, 0x0f3e9e7e7f5718f7ull, 0xc26f2624e5a4cfe7ull,
+  0xdfe8f4858c9b5ae4ull, 0xc64a1509f6fa82e3ull, 0x3024b220acb24aeaull,
+  0xddcdfeddddb02ac0ull, 0x384c86c3d834c574ull, 0xdd48a571d904e099ull,
+  0x77b35c744550a05full, 0xaaebdc6d81e85f71ull, 0xd4cdc0540f9bb0b1ull,
+  0x845786af7af4df85ull, 0xdf2a91cae5e53887ull, 0x5689a3c4f6a58211ull,
+  0xa705983a8cf6aa15ull, 0x2ce7fef09fbf2f52ull, 0x4a3b536548e84a62ull,
+  0xd48a0872f8281a47ull, 0xf0929c3e8423dcf6ull, 0xe9ec071b044a5049ull,
+  0x20e30c1b17decc36ull, 0x3342196a45fc2813ull, 0x6601e33746afb7f9ull,
+  0xf18094d130754439ull, 0x61410dd1d38b4112ull, 0xd97d4dd8d8796b36ull,
+  0x8080519147e9bc0bull, 0xcde438c11584e2daull, 0x409659a1955d24f1ull,
+  0x5a09635f1b0950b1ull, 0x615472b965b1febeull, 0x6308e067525dc00aull,
+  0xd4e705a44089e2d4ull, 0x32c18b2643fc9209ull, 0xaf2711534447a5faull,
+  0x4dc4f0d23617cadcull, 0x6aa116ef692eb386ull, 0x0641dc0b655991bcull,
+  0xc655966454469597ull, 0x4bdc0d1a749c0fe8ull, 0xc5292a61a7d3381eull,
+  0x42474cc24eb65fdcull, 0x19dfc9eef2c6b173ull, 0xbece2ee30a19a199ull,
+  0xaa03aa7cc68b778dull, 0xae54d2bec8db86f0ull, 0xdee3f48fb92a01e0ull,
+  0xf6ae28526023c0a9ull, 0xa441cb9ea233763bull, 0x3a8bb4b73246ddddull,
+  0x308ef2c844faa3c3ull, 0xd2862534fd1c8516ull, 0x62336f6f3b25ebe7ull,
+  0x0b8e2ce60c336a45ull, 0x11eea1f2e867f171ull, 0x68df4903523972ecull,
+  0x51ef4cb750c05824ull, 0x3ffae115cb4df2a8ull, 0x3ed1635fb51aca2full,
+  0x0a5ac09fd6ff1cc6ull, 0x0a3dc76fde8ed9d6ull, 0x37991dde5dc2d8ddull,
+  0x80ad6e13f95bacb2ull, 0xd4f8c7a6163005eeull, 0xa4760f083225d180ull,
+  0x9b2b1a875fff004dull, 0x5cd00b66e7ea8576ull, 0x285dd80dec478452ull,
+  0x4301b3a120112439ull, 0xfacbb68cff879fc8ull, 0xb17fdf84af6af6b8ull,
+  0xf4489576c208d9f1ull, 0xadcc862c8794a6e9ull, 0x931685a40e83e54cull,
+  0x1e40293bab01c580ull, 0x1f1ddf7fcad784faull, 0xcee722b26b856084ull,
+  0x74254eb41c39938bull, 0xb9c26d9ac7ccebf4ull, 0x2e3ece246b08dfb9ull,
+  0xdff60410981455ecull, 0xe06fa38bbc804e2bull, 0x72e53c52b534540cull,
+  0xb2a5c05a02dfb2efull, 0x973133385002a2a5ull, 0xd61df455597c53ffull,
+  0x39ac2ec534e5261aull, 0x388b7539c6bc0cabull, 0x00eac7043f732fc0ull,
+  0xc089971e92fb21d9ull, 0x7af93f8fb4ffa503ull, 0xa8311b2372e353b6ull,
+  0x1de496ca8266c9afull, 0xd6fa0b51dbdb16b0ull, 0xbd5630899991a5efull,
+  0x0954a1e3168cbe0full, 0x53d09723537b9245ull, 0x86558cb92867272dull,
+  0xfac85d100b83f026ull, 0x1e5ddb95f8562951ull, 0x48d27b92ad3668c8ull,
+  0x19b58a99c930b7e6ull, 0xa9cda917a3de74e3ull, 0x7a4dd16ecb6e35eeull,
+  0x4d84073f4c80e9d5ull, 0x9cffcfc074a95ba8ull, 0x15796372d28485ebull,
+  0x77eda8df5717e9cdull, 0xadb965e1ab473c4eull, 0x5bc05659ffad6959ull,
+  0xfb2402276ed63880ull, 0xd15fdddf2014850bull, 0xb538f37dfdd74592ull,
+  0x1473396f3a8e2e82ull, 0x3ce41a21f6a5edf8ull, 0x754e82640cc4351aull,
+  0xc7821b96aab95e73ull, 0xc242faaaf42ff463ull, 0x087e260edd00ac65ull,
+  0x0dbe032817d193f5ull, 0xf9d10f96844a63c9ull, 0xbaf127ec85aa91ddull,
+  0xce85e6a50ab6dabbull, 0xe7b56a161af5d24full, 0x57d1d79fcd6c5a19ull,
+  0xec4dd2f05dfc2b28ull, 0x8d72216a18fe64a1ull, 0x72f14a085f222077ull,
+  0x3bf038abd8b09b11ull, 0xc4265d7cc6cf1f44ull, 0x46398d2cdab1b0e7ull,
+  0xb6e705d37dcfdc68ull, 0x362c11834aafd1e6ull, 0xf6ac98b7d8701107ull,
+  0xd6649424ad114d7eull, 0xddd1c6e4c40ab551ull, 0xc9d284c8a132030full,
+  0x824069eedb1f662aull, 0xc846b3ad4157904bull, 0x0a248c17d38481caull,
+  0xe8745febc846831full, 0x00000000000025a8ull,
+
+# define TENS_P14_IDX	(TENS_P13_IDX + TENS_P13_SIZE)
+# define TENS_P14_SIZE	852
+  [TENS_P14_IDX] = 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+  0x41b5687d099f0001ull, 0x8c75ee63cbfd1b6eull, 0xd75296ad4b191ceaull,
+  0x1eb5da9b2394d80aull, 0x5c79fed918a004edull, 0xed67a1b837e3b01cull,
+  0x2a1a34d578d9a714ull, 0x6b1d35168fbe7f0dull, 0xa7825681e57c43eaull,
+  0xd3e716e1c81d32e8ull, 0xa6d93d6558860b00ull, 0x0113232f83159c97ull,
+  0x7321c3a0d6122269ull, 0xca4ca9d3be6a92f3ull, 0xc0e55163d1e276a5ull,
+  0x7b7a78c1b05915d6ull, 0x62a3df4b0fae0ca4ull, 0x13030d1108abec6full,
+  0x60dcc8f2d446338aull, 0x25e1f9f65f05d1d5ull, 0x7f8c711304a40beeull,
+  0x589ff59a88f47ec0ull, 0xea5068a1308c3661ull, 0x06e87dff95fb108full,
+  0xd4d4abdc1559e741ull, 0xee16907c01e092e4ull, 0xe73aabcb5a7b78e6ull,
+  0xad372889146bb7e0ull, 0xfd49fc1d4f6b43c5ull, 0xd37392530f29f589ull,
+  0xe2acfcc2c4745a56ull, 0xedd016cdd75ccbc7ull, 0xef82ccd3ac5a63e0ull,
+  0x2bdabfc4b352496eull, 0x01b0197f5b3d0401ull, 0x29d9253dade96d3cull,
+  0x73c56b1b19bebdbaull, 0x1f2b7f1e255e7b25ull, 0x6299c836a56a457eull,
+  0xa2ca74c65c63cc78ull, 0xee571bea5c85fe93ull, 0x2db5f1d0508e2561ull,
+  0xa9b87b99b1fde6a9ull, 0xf7260f074fb90a37ull, 0x56ee7e97ff58c5fdull,
+  0x42e6f9cebab9fa46ull, 0x1b76d26778816f73ull, 0x4566519cfdb2c728ull,
+  0xb9f6a95fae17dd8dull, 0x67160dea1cd533a1ull, 0xfcd8f8f914534bacull,
+  0x708b1f0af3f2901dull, 0x9457a1df8829063bull, 0x36bb93358f872aa1ull,
+  0xd889d109b5672c0eull, 0x933066727ec63a6aull, 0x8239ab6839b6d457ull,
+  0xbe0d7a1fef2e2506ull, 0x05f655224251b635ull, 0x032868910ef0bd55ull,
+  0x9815fbac2c42b664ull, 0x814e379c471fd611ull, 0xa4a25bda7dd8349dull,
+  0x01b9e39d9886b84cull, 0xae31cbc95a7ce1a2ull, 0x83ef8faf86d07f32ull,
+  0x58470fdfb66b5b76ull, 0x5161888996d59b73ull, 0xfc8e0fc6dc400cf7ull,
+  0x09a08e56af693670ull, 0x74f682e191737de6ull, 0x7f8ac56d0e03923full,
+  0x8e05e49a7400cfd4ull, 0x384e11644cebea3cull, 0xb50ae05eb2e43d8cull,
+  0xa40061230f0b3ed9ull, 0x4e9a193464137137ull, 0xd9621be605404100ull,
+  0x5c347ebb9329a255ull, 0xe684346b75cbeb1bull, 0xba6a9753840fee55ull,
+  0x60505b7bf43836f6ull, 0xfd6d475d334a9278ull, 0x267375aa5db94761ull,
+  0x024f6d63c110e160ull, 0xa99b4c192ec96610ull, 0x338cfd90b915c9f4ull,
+  0xb9e51a09f02ea846ull, 0xfae31d88ae928fb1ull, 0x8475dd261a3db721ull,
+  0x7ad4c4075769489dull, 0x34e275c80a49e9f0ull, 0x1d63114a3d075d83ull,
+  0x6b98e94772a96415ull, 0xd50fdc361d500b5full, 0x87751275141e5085ull,
+  0x2278809ee7843834ull, 0x947aead2b15c52eeull, 0x5197b744fedb7b02ull,
+  0x8849d0a664e09ba8ull, 0x11ecb91323beaa85ull, 0x5d9848480f7ed667ull,
+  0x588290e99f6331eaull, 0x7e09e9e5a24d64d1ull, 0x03a501df32592033ull,
+  0xbb3df73827c270a6ull, 0x4190833c3c7c5a70ull, 0x80e5d89b7d4bf9f4ull,
+  0xfaefb663a7fc6194ull, 0xd3b6adcd62e52b49ull, 0x1f2cf73a809646fcull,
+  0x531e4bfbb765ed4full, 0xaf12d1a692cd05f2ull, 0x38da107422ee30f3ull,
+  0x1a725608ed6447bbull, 0x7a3c6f54aff222d3ull, 0x7b0e8d12bca79a56ull,
+  0x6e34d6fb1c4660c5ull, 0xfe9dc99c6f481a9full, 0xd8489ea0f888db82ull,
+  0xc0dea28184b4c0faull, 0xae30e887977a8583ull, 0x1d4848cb8c1cbcecull,
+  0xd011b0fc0ee0d137ull, 0x478d7dd494b5fd49ull, 0xacab62ad3d67f2e7ull,
+  0x1dfc7df50ab4e62aull, 0x870b0e75d22e4553ull, 0x1b73bf6d49b7b001ull,
+  0xdc9f073712807ffdull, 0xc0e2f2506f3e5852ull, 0x4d96a55a93e62e4aull,
+  0x83a126dbc1d0e185ull, 0xefbfd043190b917bull, 0x8f25b6ddc7df1669ull,
+  0x476c17a62062eac9ull, 0x25460383cb60f278ull, 0xda8c05be0e85e996ull,
+  0x692062346f678a34ull, 0x1947b69af59be929ull, 0x90fd83220ebfa11bull,
+  0xd699b1ec15c1e9bfull, 0x7001d002b2f0343full, 0xc0778ab5cf76eaaaull,
+  0xb7b008e25173eda8ull, 0x505d3f4d4e00e4c6ull, 0x1c9d4e1299dd341aull,
+  0x474c5e954ffb6978ull, 0xda19f9386e9ca6ddull, 0x98dc318ee2dda6e0ull,
+  0x3f67b836da455e54ull, 0xa97e9a6421e4181cull, 0x527a08bb1e17f655ull,
+  0x682972ad1712dc21ull, 0xccbeadf10042d256ull, 0x861e99e0ca497b96ull,
+  0xeeb0f6500d8aa585ull, 0x506af77edcc3c3daull, 0x7c9d60be5deb9768ull,
+  0x37b37e95e9d978b7ull, 0x42747f7577ad0b94ull, 0x6d5fd2fe07be42c4ull,
+  0x0d8fc27d4c8c5da9ull, 0x0ccf60230f2fd50full, 0x3b1101bd5b56053full,
+  0xc0feca2756d34906ull, 0xc4888da47602a150ull, 0x56d10633419abe54ull,
+  0x8db14123c76120edull, 0x741e8f76b656e675ull, 0x96be6f21d297b94eull,
+  0x9b409e273662439dull, 0x35fff92a6626574dull, 0x69e02439bf558205ull,
+  0x6400fd4cbe6838b7ull, 0x1f4b158aa00f64caull, 0x04cca5589e2052aeull,
+  0x58da644cfb5ee69eull, 0x8ab1940196f26e1full, 0xed8bf908bee1e16bull,
+  0xd50babab2f2809a4ull, 0x6b0a89296e57f7e6ull, 0xb54a4cfcf7356431ull,
+  0x6f9fd6cb9a1d0ac4ull, 0x3b42f469836bfbf8ull, 0x40111b6b8bd32129ull,
+  0xb345d9557c278fb1ull, 0xd32cd13cff1fd188ull, 0x3789f792f7ec3aa0ull,
+  0x4d79a4bfab707fa4ull, 0xd9c24d8eb3a28cebull, 0x06e2eb3e7134dadcull,
+  0xb379d811d7c04f76ull, 0x8c94fc332b3b0ebcull, 0xc06c5d01a28b53abull,
+  0x7fea91cad900432aull, 0x64845f086d30b008ull, 0xfde4687d796f5349ull,
+  0xe0046c56f888fe67ull, 0xce98cb11ae482177ull, 0x1feb440084590c46ull,
+  0xff2f16116e1ba29bull, 0x3159ca8cf73f3e9cull, 0x56f0ed4634845918ull,
+  0xd9a16a01b7d10c32ull, 0x3cee3e24405b9e91ull, 0x2ab396b48739e4a6ull,
+  0x09835dfd3f1b7871ull, 0x1592b74a8c7a489full, 0x0e8d3f3705df7c81ull,
+  0x68b29622a61ff273ull, 0x43ff84a6259cd337ull, 0x566ed88381cf8fe9ull,
+  0x35c7942848427fc6ull, 0xa97e8c8bcfd2fb59ull, 0x32ddca23750aaed8ull,
+  0x96fbfff9aa8108efull, 0xe3cdf588a1d039aaull, 0xcd6b3fdb47e77e00ull,
+  0x9a522152e72a9a80ull, 0xef175610eda06283ull, 0x339fe6c4a670cfa1ull,
+  0xc2d7f53b2dfbf3eeull, 0xcc47e4b092a44e27ull, 0xd64f83c9dfa212bcull,
+  0xb51319bf997e5475ull, 0x1fc2c7b69fffe599ull, 0x832169ddef5605e7ull,
+  0xbf921dc8feb6be4eull, 0x72759f8d60bdfb1dull, 0x020eebed3546efa0ull,
+  0xdb20a2fecaab3d64ull, 0xb2b62bddba1218f6ull, 0x8fde5cfa3101eff0ull,
+  0xa52114d22e319213ull, 0xdf08b1dd87eead3full, 0x746f34d0a5387642ull,
+  0x4cc40317d76c4844ull, 0xb7d76071e4f689c9ull, 0x6e1c79155fe0b4a2ull,
+  0x3efb7d71c7d43f53ull, 0x35a75f5f068dd906ull, 0x750f4607652d7770ull,
+  0x36c2cf8e64a1656cull, 0x9348ef93214d758bull, 0x9674b7f3e4058978ull,
+  0xbdfaba8f10570b0bull, 0xa92b261fcef09dd7ull, 0xcbebb81f071c21b6ull,
+  0x44228cd6f427ed6cull, 0x5036c46065e56fcfull, 0xccfd848bad919defull,
+  0x7527dca361d158a6ull, 0x508550754cf30459ull, 0x3540f5aaa70dfd09ull,
+  0xb5ba3d4e35577adbull, 0xcdfb689f35736c4full, 0x97ab0dcaefe8fa82ull,
+  0x77a7fe9c51bd2ff3ull, 0x3d618b813107846cull, 0xfc5e9651bca797a4ull,
+  0xf7e8791fe2e08fbcull, 0x7c426f9d772f1cc0ull, 0x0080c3ab08d56f88ull,
+  0xe6d46ec60deea663ull, 0x6b681d9d7dca4eb7ull, 0x4af0e0f2da06730bull,
+  0x52097463038bf468ull, 0xbc09bb9aca19d302ull, 0x3ded4433aa55aeb1ull,
+  0x3e4b7865f27938baull, 0x7ef9631428296be7ull, 0xdf0b6b477a1d55ccull,
+  0xcedda5bdcde11852ull, 0x72ca1a8bf00a0eb3ull, 0xb002fdcc5241b572ull,
+  0xc4878862ff8898b3ull, 0xbf4bca29b3e85372ull, 0xf2d831897e1fef45ull,
+  0x3cdf9e050f5427afull, 0xf65c06ac75bae885ull, 0xa3145eac9c71a700ull,
+  0x76255bbfde63bab2ull, 0x4c6ad3d06e817be6ull, 0xe95ef2f825ab9935ull,
+  0xd54f78de11cd095aull, 0xb3829dcba001ae7eull, 0x18eb9c9e5abd18bdull,
+  0xe3e3556cada3c504ull, 0x5191ac5fd35479aaull, 0xc8d1d9d3221821acull,
+  0x088c3fc8313a8c51ull, 0xb154abedc146a264ull, 0x349ec09392755bc5ull,
+  0x41d5886cf94aba57ull, 0x36aba94b0a5ad8b2ull, 0xa9ad229f883a6758ull,
+  0x0546172f5d64069aull, 0xc3808ea40366da16ull, 0x70f0a2350b172403ull,
+  0x4fceb827fa816e66ull, 0x167b56d5a65fcfeaull, 0xfec36bcdfe2b9fb2ull,
+  0xcd96320fa84c4cc9ull, 0x09eda8b83e128584ull, 0x7ec7e17b91eca525ull,
+  0xc14032f4bc45bedcull, 0x2eb20bc09be689a7ull, 0x14ef835fffdf1efcull,
+  0xcd778dd8c6966c59ull, 0x23d477155feb0f3bull, 0x5722a550d64b87c8ull,
+  0x315a1a8b62883198ull, 0x4b7e9d7a648e17e6ull, 0x67caca842ba43d28ull,
+  0x6e660159741f0398ull, 0x3dde3c453e16e1a9ull, 0xc7eb0aefa53e56aeull,
+  0x78751d733f39f33eull, 0x626770f745816df8ull, 0x909e87f4cb17d28dull,
+  0xc1dcf32893a86abaull, 0xd895d0421a1e4ce2ull, 0xbb00eaf5b9f6dd69ull,
+  0xca609578acc37687ull, 0xf8b86d4c5b490d39ull, 0x39419f6df2737ef0ull,
+  0x72524a0369267bc0ull, 0xdbc01e936eb060c4ull, 0x83984d54291035b1ull,
+  0xe08cbc20f673ad85ull, 0x584803a61fb24915ull, 0x4088ddb5e15bbcd7ull,
+  0x2c18041ad4c22542ull, 0xb2ba69b4a51372d1ull, 0xcd11c2962299283full,
+  0xac54df2325dcd6f3ull, 0x77e16e1d24a3a55eull, 0xb99d85c0b3cd415bull,
+  0xe91154e3497befc7ull, 0xb55100aa7365cd8bull, 0xfc0927a60ee699ebull,
+  0x8acaa910efb374deull, 0xda3f000683b40e3dull, 0xc6ce1b758590a089ull,
+  0xfda2f7f354f6ff20ull, 0xd0763b6dd2ab58f6ull, 0x2519622d6caf2515ull,
+  0x9863638fc3714057ull, 0x09ea4a4dea00bb4full, 0x6b01fe5fe69de96dull,
+  0x529e32ec960161a5ull, 0x01a37eeaf8260ae9ull, 0x5aa0716f69710577ull,
+  0x4260fedacb3fb1daull, 0x76012f75a33fb790ull, 0x130f09ae24c0e5beull,
+  0x5c8ecb762e8323dcull, 0x401b5f5c17cb8f12ull, 0x47e1560a5f0a63e0ull,
+  0xee1377d4dc57a786ull, 0x0aa294b9228e7ee5ull, 0x55b0fe2faea6c534ull,
+  0xf108b772922d318aull, 0xdfb69702f15bddf6ull, 0x90e1db66cd438a4eull,
+  0x568ef6cb584ce4a1ull, 0x6da376ba69e55f9dull, 0x45c7e2945ca6c109ull,
+  0xcf5b6c0cc977b3e9ull, 0x11b487ae1d694499ull, 0xbcb3cc6ecf8339acull,
+  0x046b107150b828e0ull, 0x2c6159465703ed0dull, 0xa908dbd0720d1610ull,
+  0x22c076e2742bbe33ull, 0x1d0cefa448966a66ull, 0x601352bf1dde819full,
+  0xa585cc4ab9370c39ull, 0x5a2f7206eb857f94ull, 0x49cd0f1f3fae6b58ull,
+  0x1b89d47678e5fb3dull, 0xed82945b74e9e65bull, 0x2941c4d9b74e6483ull,
+  0x565c18dc7e087accull, 0xbf4ccd3d1a09f2e5ull, 0xa522631dd304e977ull,
+  0x4517109b6123378eull, 0x4bf1a506b7e4285aull, 0x683172f8625803c2ull,
+  0x3f8a2b11c84e7354ull, 0xed4204917dd12b89ull, 0x9853fb978c698b0bull,
+  0xb697e1c99631777bull, 0x510381105f028f05ull, 0x30e255e39055f055ull,
+  0xb990321ee2d0c1b6ull, 0xff4dc144a8fdf4d1ull, 0x148999e0521a3056ull,
+  0xa9c96852a8111c66ull, 0x4b394a948157f508ull, 0x94ec2e93a0dc4df1ull,
+  0x8fc283776e6afa56ull, 0xc435186ff72ffa04ull, 0x8d037f6ff91488b7ull,
+  0x48757727a899ec1eull, 0xb8cf377d4101b612ull, 0xb4570569a5a54e68ull,
+  0x063d9cfd2ac5a0a0ull, 0xf1a5884c7c504c74ull, 0x8d0b91bf0a9b1955ull,
+  0x79ff5361e5f6862full, 0xc6fd31fb0ed3d38full, 0x85b9c6489fe131c7ull,
+  0x8e77e86b8febf2b4ull, 0x56429986992ba80eull, 0x608cdda56848879aull,
+  0x754b300e3e0d106eull, 0xafd5195b25200576ull, 0xe81f09395d37aad9ull,
+  0xdeeea20ae00a390eull, 0xb5d51155f5fef0beull, 0x9e72ebcf6e27d173ull,
+  0xb966f7bab776e978ull, 0x726c840809520238ull, 0x65dce5a23347ebc5ull,
+  0x8c92d7403ec78337ull, 0x32caec933cdde3feull, 0x411be811d20379aeull,
+  0x72fa1bbd41756580ull, 0x84c42f04a92125b3ull, 0x3a25922cdd4ee5feull,
+  0x49ad3be096446853ull, 0x1c841afe2880366dull, 0xfb905fe1f1e09019ull,
+  0x3ba9d0c9a451ad59ull, 0xa42419f256db2e9cull, 0x3c9a3ca5e921e7a0ull,
+  0xcec7d091ad8ea375ull, 0x477ef58f99bdb940ull, 0xb2598b8d8a4933c7ull,
+  0xcfac1e1cf5659df7ull, 0xe2a04aab339f8748ull, 0x45bc6f37e122b03full,
+  0x9c75aaa0c9feeb30ull, 0x0ea0585dc13c174eull, 0x3a96bd5adc58bbb4ull,
+  0x3c7a714d20251482ull, 0x6cb83b6b696897ebull, 0x3b496b5fa37de406ull,
+  0x380dd38237e75d6aull, 0xda26fac90e1a513cull, 0x12b5c6eaf2458364ull,
+  0x1ff1fcbf79ce9e47ull, 0x59a6a7babe7c6e86ull, 0x947614538d70f515ull,
+  0x8768ffb26b04e425ull, 0x3f9e84071ca5f425ull, 0x5f8f67563b641184ull,
+  0x56bc212062b1a5a5ull, 0x17f2fa18d1e5da68ull, 0xa1bc9c068cce5e2dull,
+  0x892df1af8e290fb1ull, 0xb43e5517ad10b8c8ull, 0x4407c38fd0597409ull,
+  0xfea9c9b64a020d81ull, 0xd5b2aaf9d8e0e7d6ull, 0xda44ed4ade5e9b40ull,
+  0x87aa3ca045d6bf41ull, 0x4708acc8c62d12fcull, 0x0d1227ff10212e26ull,
+  0x5da02550feeb5742ull, 0x1d56e5e1d66668e7ull, 0xae1e0bef32c215ecull,
+  0x58c0e9227f048b7eull, 0x58251aac2aea8619ull, 0xa1fea536bbe10425ull,
+  0xd233eb7d2e1d9667ull, 0xb0693c67cf435c0bull, 0x903ec9f061d918eaull,
+  0x0efb1788d6c4e8acull, 0x1709d878b0098f5bull, 0x3f6ce1b73c12b35eull,
+  0x8a8f7dbba1b3ff54ull, 0x73e8563e37608d6aull, 0x64e00749a3330540ull,
+  0x8d5caaf9ebbfcab9ull, 0xedb2bd943bc87c7eull, 0xe656dec322f8f62dull,
+  0x670c1626c5683222ull, 0x4237542f94089e7full, 0x2fc4e53047d29440ull,
+  0x8b288dac8419441eull, 0xa7afb4e97f9245f9ull, 0x082adef78a15650dull,
+  0x043c62de3104ef19ull, 0x7ecd06350aff3dc5ull, 0xe0600fade7e80a8bull,
+  0x81ebf4e04d8e81ccull, 0x7b372af7f587e30full, 0xdee11c6f2d8f8ca0ull,
+  0xf8adc426d3624b1cull, 0x5c22de4fca9debedull, 0xfae3186b3634f778ull,
+  0xd7bfa75facf8b595ull, 0xbbfe3cf6003cd316ull, 0xc51055a1b023cb50ull,
+  0x93869a770063cffdull, 0xfbceeb1051e022d4ull, 0x109defc95187457eull,
+  0xe13cfde2673892d8ull, 0xc09c8134d4aa3272ull, 0x0327181bbf89ad5bull,
+  0xaa21b63209511ec7ull, 0xe41885b5d7e72186ull, 0x493d278946713f9cull,
+  0xd5d22a5c1386c526ull, 0xcf59281ccefddfc4ull, 0x4ebe43f692973ea6ull,
+  0x6cf4897deac5c6adull, 0x82ce562ad95082a0ull, 0x28d8f0db28e5e9bdull,
+  0x707b0166ddf06e81ull, 0xfbf5756a7dae3f00ull, 0x4f114102035a4680ull,
+  0x5190fedfe7ba4b33ull, 0xe5f1bc49106a7594ull, 0xd7a1a766aae3ad67ull,
+  0x9120a214040ee971ull, 0x1edc87eaf415b374ull, 0xc6ad637d17aab43cull,
+  0xd90303c7885858c1ull, 0x3ff4eb0ebfd4b70bull, 0xd81eea30344a9a88ull,
+  0x5adef0ec95925446ull, 0x20bbd8c3abb5f5e7ull, 0xe6944262c1c22cceull,
+  0x80024021c5acdb23ull, 0x94b30c812232c635ull, 0x78569acd55f07648ull,
+  0x4dd6b5289696ea39ull, 0xde5853b31c3e1b40ull, 0x6eb5a7d88a2c3679ull,
+  0x8f9cf09656bda89aull, 0x6481c7e7fda86d5bull, 0x15bfb45d50a6a7d5ull,
+  0xc057d45d4f9a5381ull, 0xa0009f004fb10024ull, 0xac420f745e1ca0ddull,
+  0xf0d4a615cfbb38bdull, 0x0e3aef8419bf0318ull, 0x166c1e3ecb3d7b20ull,
+  0x3bfacf9f58272fddull, 0x63a13528c0f5ce46ull, 0xa020ca8cea59e333ull,
+  0x3dbb5a3daadd116bull, 0x747f55eae5523f47ull, 0x64d520fb0922171eull,
+  0x07ce951b6c709e84ull, 0x7508eb6d35fdc402ull, 0xb0d11c39c495a8faull,
+  0x57447ef081313d65ull, 0xf72301f3a7b61e26ull, 0x45a3a7c5bb096315ull,
+  0x00432f88a903a44bull, 0xeb4e1b6619081987ull, 0x6d245171bb7b66bdull,
+  0x0d89bd0bde4182f5ull, 0xf70d8a6087f4de6cull, 0x08a274499a87855bull,
+  0xd49640174ac7720aull, 0x4db3488cb0d9ddacull, 0xd07b745bfe397d44ull,
+  0x6e9d567d197dcb7bull, 0x9143fef1e3b90812ull, 0x115ff96db9e002acull,
+  0x5b61c9c8f60a2201ull, 0xb14a44a709abab2full, 0x843c79970ca19c73ull,
+  0x5e3fc18ce3a9bbe6ull, 0x764df59d0c0404eeull, 0x4ad0ba3c990ec2c2ull,
+  0xe599647d05e8be0full, 0x4d0c2990c19d365dull, 0xb680a72de5a9d9acull,
+  0x6d6c02674ce2e5ddull, 0xbd6078e006f9c25bull, 0xd742fa41b5fcdc81ull,
+  0xc691adc0cccc2399ull, 0xea73b0c3215ad82cull, 0xf499e0a6a511e5b0ull,
+  0xd94440a253e27ab0ull, 0x9a6e364447752521ull, 0x8f8b301dab113708ull,
+  0x00000000058a42a3ull,
+#endif
+};
+
+#else
+# error "mp_limb_t size " BITS_PER_MP_LIMB "not accounted for"
+#endif
+
+/* Each of array variable above defines one mpn integer which is a power of 10.
+   This table points to those variables, indexed by the exponent.  */
+
+const struct mp_power _fpioconst_pow10[FPIOCONST_POW10_ARRAY_SIZE] =
+{
+  { TENS_P0_IDX, TENS_P0_SIZE,		4,	     },
+  { TENS_P1_IDX, TENS_P1_SIZE,		7,	   4 },
+  { TENS_P2_IDX, TENS_P2_SIZE,		14,	  10 },
+  { TENS_P3_IDX, TENS_P3_SIZE,		27,	  24 },
+  { TENS_P4_IDX, TENS_P4_SIZE,		54,	  50 },
+  { TENS_P5_IDX, TENS_P5_SIZE,		107,	 103 },
+  { TENS_P6_IDX, TENS_P6_SIZE,		213,	 210 },
+  { TENS_P7_IDX, TENS_P7_SIZE,		426,	 422 },
+  { TENS_P8_IDX, TENS_P8_SIZE,  	851,	 848 },
+  { TENS_P9_IDX, TENS_P9_SIZE,	 	1701,	1698 },
+  { TENS_P10_IDX, TENS_P10_SIZE,	3402,	3399 },
+#if FPIOCONST_HAVE_EXTENDED_RANGE
+  { TENS_P11_IDX, TENS_P11_SIZE,	6804,	6800 },
+  { TENS_P12_IDX, TENS_P12_SIZE,	13607,	13604 },
+  { TENS_P13_IDX, TENS_P13_SIZE,	27214,	27210 },
+  { TENS_P14_IDX, TENS_P14_SIZE,	54427,	54424 },
+#endif
+};
diff --git a/REORG.TODO/stdlib/fpioconst.h b/REORG.TODO/stdlib/fpioconst.h
new file mode 100644
index 0000000000..c05f8e7bac
--- /dev/null
+++ b/REORG.TODO/stdlib/fpioconst.h
@@ -0,0 +1,88 @@
+/* Header file for constants used in floating point <-> decimal conversions.
+   Copyright (C) 1995-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _FPIOCONST_H
+#define	_FPIOCONST_H
+
+#include <float.h>
+#include <math.h>
+#include <gmp.h>
+
+
+/* These values are used by __printf_fp, where they are noncritical (if the
+   value is not large enough, it will just be slower); and by
+   strtof/strtod/strtold, where it is critical (it's used for overflow
+   detection).
+
+   XXX These should be defined in <float.h>.  For the time being, we have the
+   IEEE754 values here.  */
+
+#if !defined __NO_LONG_DOUBLE_MATH && __LDBL_MAX_EXP__ > 1024
+# define LDBL_MAX_10_EXP_LOG	12 /* = floor(log_2(LDBL_MAX_10_EXP)) */
+#else
+# define LDBL_MAX_10_EXP_LOG	8 /* = floor(log_2(LDBL_MAX_10_EXP)) */
+#endif
+#define DBL_MAX_10_EXP_LOG	8 /* = floor(log_2(DBL_MAX_10_EXP)) */
+#define FLT_MAX_10_EXP_LOG	5 /* = floor(log_2(FLT_MAX_10_EXP)) */
+
+/* On some machines, _Float128 may be ABI-distinct from long double (e.g
+   IBM extended precision).  */
+#include <bits/floatn.h>
+
+#if __HAVE_DISTINCT_FLOAT128
+# define FLT128_MAX_10_EXP_LOG	12 /* = floor(log_2(FLT128_MAX_10_EXP)) */
+#endif
+
+/* For strtold, we need powers of 10 up to floor (log_2 (LDBL_MANT_DIG
+   - LDBL_MIN_EXP + 2)).  When _Float128 is enabled in libm and it is
+   ABI-distinct from long double (e.g. on powerpc64le), we also need powers
+   of 10 up to floor (log_2 (FLT128_MANT_DIG - FLT128_MIN_EXP + 2)).  */
+#define FPIOCONST_HAVE_EXTENDED_RANGE \
+  ((!defined __NO_LONG_DOUBLE_MATH && __LDBL_MAX_EXP__ > 1024) \
+   || __HAVE_DISTINCT_FLOAT128)
+
+#if FPIOCONST_HAVE_EXTENDED_RANGE
+# define FPIOCONST_POW10_ARRAY_SIZE	15
+#else
+# define FPIOCONST_POW10_ARRAY_SIZE	11
+#endif
+
+/* The array with the number representation. */
+extern const mp_limb_t __tens[] attribute_hidden;
+
+/* Table of powers of ten.  This is used by __printf_fp and by
+   strtof/strtod/strtold.  */
+struct mp_power
+  {
+    size_t arrayoff;		/* Offset in `__tens'.  */
+    mp_size_t arraysize;	/* Size of the array.  */
+    int p_expo;			/* Exponent of the number 10^(2^i).  */
+    int m_expo;			/* Exponent of the number 10^-(2^i-1).  */
+  };
+extern const struct mp_power _fpioconst_pow10[FPIOCONST_POW10_ARRAY_SIZE]
+     attribute_hidden;
+
+/* The constants in the array `_fpioconst_pow10' have an offset.  */
+#if BITS_PER_MP_LIMB == 32
+# define _FPIO_CONST_OFFSET	2
+#else
+# define _FPIO_CONST_OFFSET	1
+#endif
+
+
+#endif	/* fpioconst.h */
diff --git a/REORG.TODO/stdlib/gen-fpioconst.c b/REORG.TODO/stdlib/gen-fpioconst.c
new file mode 100644
index 0000000000..e8b3258d1b
--- /dev/null
+++ b/REORG.TODO/stdlib/gen-fpioconst.c
@@ -0,0 +1,108 @@
+/* Generate data for fpioconst.c.
+   Copyright (C) 2012-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <inttypes.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <gmp.h>
+#include <stdint.h>
+
+int
+main (void)
+{
+  FILE *out32 = fopen ("fpioconst-32", "w");
+  if (out32 == NULL)
+    abort ();
+  FILE *out64 = fopen ("fpioconst-64", "w");
+  if (out64 == NULL)
+    abort ();
+  FILE *outtable = fopen ("fpioconst-table", "w");
+  if (outtable == NULL)
+    abort ();
+  mpz_t p;
+  mpz_init (p);
+  for (int i = 0; i <= 14; i++)
+    {
+      int j = 1 << i;
+      mpz_ui_pow_ui (p, 10, j - 1);
+      int exp_m = mpz_sizeinbase (p, 2);
+      mpz_ui_pow_ui (p, 10, j);
+      int exp_p = mpz_sizeinbase (p, 2);
+      int size32 = 2 + (exp_p + 31) / 32;
+      int size64 = 1 + (exp_p + 63) / 64;
+      uint32_t data32[size32];
+      uint64_t data64[size64];
+      memset (data32, 0, sizeof data32);
+      memset (data64, 0, sizeof data64);
+      mpz_export (data32 + 2, NULL, -1, 4, 0, 0, p);
+      mpz_export (data64 + 1, NULL, -1, 8, 0, 0, p);
+      if (i == 0)
+	{
+	  fprintf (out32, "#define TENS_P%d_IDX\t0\n", i);
+	  fprintf (out64, "#define TENS_P%d_IDX\t0\n", i);
+	}
+      else
+	{
+	  fprintf (out32, "#define TENS_P%d_IDX\t"
+		   "(TENS_P%d_IDX + TENS_P%d_SIZE)\n",
+		   i, i - 1, i - 1);
+	  fprintf (out64, "#define TENS_P%d_IDX\t"
+		   "(TENS_P%d_IDX + TENS_P%d_SIZE)\n",
+		   i, i - 1, i - 1);
+	}
+      fprintf (out32, "#define TENS_P%d_SIZE\t%d\n", i, size32);
+      fprintf (out64, "#define TENS_P%d_SIZE\t%d\n", i, size64);
+      for (int k = 0; k < size32; k++)
+	{
+	  if (k == 0)
+	    fprintf (out32, "  [TENS_P%d_IDX] = ", i);
+	  else if (k % 6 == 5)
+	    fprintf (out32, "\n  ");
+	  else
+	    fprintf (out32, " ");
+	  fprintf (out32, "0x%08"PRIx32",", data32[k]);
+	}
+      for (int k = 0; k < size64; k++)
+	{
+	  if (k == 0)
+	    fprintf (out64, "  [TENS_P%d_IDX] = ", i);
+	  else if (k % 3 == 2)
+	    fprintf (out64, "\n  ");
+	  else
+	    fprintf (out64, " ");
+	  fprintf (out64, "0x%016"PRIx64"ull,", data64[k]);
+	}
+      fprintf (out32, "\n\n");
+      fprintf (out64, "\n\n");
+      const char *t = (i >= 10 ? "\t" : "\t\t");
+      if (i == 0)
+	fprintf (outtable, "  { TENS_P%d_IDX, TENS_P%d_SIZE,%s%d,\t      },\n",
+		 i, i, t, exp_p);
+      else
+	fprintf (outtable, "  { TENS_P%d_IDX, TENS_P%d_SIZE,%s%d,\t%5d },\n",
+		 i, i, t, exp_p, exp_m);
+    }
+  if (fclose (out32) != 0)
+    abort ();
+  if (fclose (out64) != 0)
+    abort ();
+  if (fclose (outtable) != 0)
+    abort ();
+  return 0;
+}
diff --git a/REORG.TODO/stdlib/gen-tst-strtod-round.c b/REORG.TODO/stdlib/gen-tst-strtod-round.c
new file mode 100644
index 0000000000..d792a245be
--- /dev/null
+++ b/REORG.TODO/stdlib/gen-tst-strtod-round.c
@@ -0,0 +1,191 @@
+/* Generate table of tests in tst-strtod-round.c from
+   tst-strtod-round-data.
+   Copyright (C) 2012-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* Compile this program as:
+
+   gcc -std=gnu11 -O2 -Wall -Wextra gen-tst-strtod-round.c -lmpfr \
+     -o gen-tst-strtod-round
+
+   (use of current MPFR version recommended) and run it as:
+
+   gen-tst-strtod-round tst-strtod-round-data tst-strtod-round-data.h
+
+   The output file will be generated as tst-strtod-round-data.h
+*/
+
+
+#define _GNU_SOURCE
+#include <assert.h>
+#include <stdbool.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <mpfr.h>
+
+/* Work around incorrect ternary value from mpfr_strtofr
+   <https://sympa.inria.fr/sympa/arc/mpfr/2012-08/msg00005.html>.  */
+#define WORKAROUND
+
+static int
+string_to_fp (mpfr_t f, const char *s, mpfr_rnd_t rnd)
+{
+#ifdef WORKAROUND
+  mpfr_t f2;
+  mpfr_init2 (f2, 100000);
+  int r0 = mpfr_strtofr (f2, s, NULL, 0, rnd);
+  int r = mpfr_set (f, f2, rnd);
+  r |= mpfr_subnormalize (f, r, rnd);
+  mpfr_clear (f2);
+  return r0 | r;
+#else
+  int r = mpfr_strtofr (f, s, NULL, 0, rnd);
+  r |= mpfr_subnormalize (f, r, rnd);
+  return r;
+#endif
+}
+
+void
+print_fp (FILE *fout, mpfr_t f, const char *suffix)
+{
+  if (mpfr_inf_p (f))
+    mpfr_fprintf (fout, "\t%sINF%s", mpfr_signbit (f) ? "-" : "", suffix);
+  else
+    mpfr_fprintf (fout, "\t%Ra%s", f, suffix);
+}
+
+static void
+round_str (FILE *fout, const char *s, int prec, int emin, int emax,
+	   bool ibm_ld)
+{
+  mpfr_t f;
+  mpfr_set_default_prec (prec);
+  mpfr_set_emin (emin);
+  mpfr_set_emax (emax);
+  mpfr_init (f);
+  int r = string_to_fp (f, s, MPFR_RNDD);
+  if (ibm_ld)
+    {
+      assert (prec == 106 && emin == -1073 && emax == 1024);
+      /* The maximum value in IBM long double has discontiguous
+	 mantissa bits.  */
+      mpfr_t max_value;
+      mpfr_init2 (max_value, 107);
+      mpfr_set_str (max_value, "0x1.fffffffffffff7ffffffffffffcp+1023", 0,
+		    MPFR_RNDN);
+      if (mpfr_cmpabs (f, max_value) > 0)
+	r = 1;
+      mpfr_clear (max_value);
+    }
+  mpfr_fprintf (fout, "\t%s,\n", r ? "false" : "true");
+  print_fp (fout, f, ",\n");
+  string_to_fp (f, s, MPFR_RNDN);
+  print_fp (fout, f, ",\n");
+  string_to_fp (f, s, MPFR_RNDZ);
+  print_fp (fout, f, ",\n");
+  string_to_fp (f, s, MPFR_RNDU);
+  print_fp (fout, f, "");
+  mpfr_clear (f);
+}
+
+static void
+round_for_all (FILE *fout, const char *s)
+{
+  static const struct fmt {
+    int prec;
+    int emin;
+    int emax;
+    bool ibm_ld;
+  } formats[] = {
+    { 24, -148, 128, false },
+    { 53, -1073, 1024, false },
+    /* This is the Intel extended float format.  */
+    { 64, -16444, 16384, false },
+    /* This is the Motorola extended float format.  */
+    { 64, -16445, 16384, false },
+    { 106, -1073, 1024, true },
+    { 113, -16493, 16384, false },
+  };
+  mpfr_fprintf (fout, "  TEST (\"");
+  const char *p;
+  for (p = s; *p; p++)
+    {
+      fputc (*p, fout);
+      if ((p - s) % 60 == 59 && p[1])
+	mpfr_fprintf (fout, "\"\n\t\"");
+    }
+  mpfr_fprintf (fout, "\",\n");
+  int i;
+  int n_formats = sizeof (formats) / sizeof (formats[0]);
+  for (i = 0; i < n_formats; i++)
+    {
+      round_str (fout, s, formats[i].prec, formats[i].emin,
+		 formats[i].emax, formats[i].ibm_ld);
+      if (i < n_formats - 1)
+	mpfr_fprintf (fout, ",\n");
+    }
+  mpfr_fprintf (fout, "),\n");
+}
+
+int
+main (int argc, char **argv)
+{
+  char *p = NULL;
+  size_t len;
+  ssize_t nbytes;
+  FILE *fin, *fout;
+  char *fin_name, *fout_name;
+
+  if (argc < 3)
+    {
+      fprintf (stderr, "Usage: %s <input> <output>\n", basename (argv[0]));
+      return EXIT_FAILURE;
+    }
+
+  fin_name = argv[1];
+  fout_name = argv[2];
+
+  fin = fopen (fin_name, "r");
+  if (fin == NULL)
+    {
+      perror ("Could not open input for reading");
+      return EXIT_FAILURE;
+    }
+
+  fout = fopen (fout_name, "w");
+  if (fout == NULL)
+    {
+      perror ("Could not open output for writing");
+      return EXIT_FAILURE;
+    }
+
+  fprintf (fout, "/* This file was generated by %s from %s.  */\n",
+	  __FILE__, fin_name);
+  fputs ("static const struct test tests[] = {\n", fout);
+  while ((nbytes = getline (&p, &len, fin)) != -1)
+    {
+      if (p[nbytes - 1] == '\n')
+	p[nbytes - 1] = 0;
+      round_for_all (fout, p);
+      free (p);
+      p = NULL;
+    }
+  fputs ("};\n", fout);
+
+  return EXIT_SUCCESS;
+}
diff --git a/REORG.TODO/stdlib/getcontext.c b/REORG.TODO/stdlib/getcontext.c
new file mode 100644
index 0000000000..07560033a6
--- /dev/null
+++ b/REORG.TODO/stdlib/getcontext.c
@@ -0,0 +1,29 @@
+/* Copyright (C) 1998-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <errno.h>
+#include <ucontext.h>
+
+int
+getcontext (ucontext_t *ucp)
+{
+  __set_errno (ENOSYS);
+  return -1;
+}
+
+
+stub_warning (getcontext)
diff --git a/REORG.TODO/stdlib/getentropy.c b/REORG.TODO/stdlib/getentropy.c
new file mode 100644
index 0000000000..a71d4cd8f5
--- /dev/null
+++ b/REORG.TODO/stdlib/getentropy.c
@@ -0,0 +1,31 @@
+/* Stub for getentropy.
+   Copyright (C) 2016-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <sys/random.h>
+#include <errno.h>
+
+/* Write LENGTH bytes of randomness starting at BUFFER.  Return 0 on
+   success and -1 on failure.  */
+ssize_t
+getentropy (void *buffer, size_t length)
+{
+  __set_errno (ENOSYS);
+  return -1;
+}
+
+stub_warning (getentropy)
diff --git a/REORG.TODO/stdlib/getenv.c b/REORG.TODO/stdlib/getenv.c
new file mode 100644
index 0000000000..b6fb1abeaa
--- /dev/null
+++ b/REORG.TODO/stdlib/getenv.c
@@ -0,0 +1,92 @@
+/* Copyright (C) 1991-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <endian.h>
+#include <errno.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+
+/* Return the value of the environment variable NAME.  This implementation
+   is tuned a bit in that it assumes no environment variable has an empty
+   name which of course should always be true.  We have a special case for
+   one character names so that for the general case we can assume at least
+   two characters which we can access.  By doing this we can avoid using the
+   `strncmp' most of the time.  */
+char *
+getenv (const char *name)
+{
+  size_t len = strlen (name);
+  char **ep;
+  uint16_t name_start;
+
+  if (__environ == NULL || name[0] == '\0')
+    return NULL;
+
+  if (name[1] == '\0')
+    {
+      /* The name of the variable consists of only one character.  Therefore
+	 the first two characters of the environment entry are this character
+	 and a '=' character.  */
+#if __BYTE_ORDER == __LITTLE_ENDIAN || !_STRING_ARCH_unaligned
+      name_start = ('=' << 8) | *(const unsigned char *) name;
+#else
+      name_start = '=' | ((*(const unsigned char *) name) << 8);
+#endif
+      for (ep = __environ; *ep != NULL; ++ep)
+	{
+#if _STRING_ARCH_unaligned
+	  uint16_t ep_start = *(uint16_t *) *ep;
+#else
+	  uint16_t ep_start = (((unsigned char *) *ep)[0]
+			       | (((unsigned char *) *ep)[1] << 8));
+#endif
+	  if (name_start == ep_start)
+	    return &(*ep)[2];
+	}
+    }
+  else
+    {
+#if _STRING_ARCH_unaligned
+      name_start = *(const uint16_t *) name;
+#else
+      name_start = (((const unsigned char *) name)[0]
+		    | (((const unsigned char *) name)[1] << 8));
+#endif
+      len -= 2;
+      name += 2;
+
+      for (ep = __environ; *ep != NULL; ++ep)
+	{
+#if _STRING_ARCH_unaligned
+	  uint16_t ep_start = *(uint16_t *) *ep;
+#else
+	  uint16_t ep_start = (((unsigned char *) *ep)[0]
+			       | (((unsigned char *) *ep)[1] << 8));
+#endif
+
+	  if (name_start == ep_start && !strncmp (*ep + 2, name, len)
+	      && (*ep)[len + 2] == '=')
+	    return &(*ep)[len + 3];
+	}
+    }
+
+  return NULL;
+}
+libc_hidden_def (getenv)
diff --git a/REORG.TODO/stdlib/getrandom.c b/REORG.TODO/stdlib/getrandom.c
new file mode 100644
index 0000000000..b2a83c2db7
--- /dev/null
+++ b/REORG.TODO/stdlib/getrandom.c
@@ -0,0 +1,31 @@
+/* Stub for getrandom.
+   Copyright (C) 2016-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <sys/random.h>
+#include <errno.h>
+
+/* Write LENGTH bytes of randomness starting at BUFFER.  Return the
+   number of bytes written, or -1 on error.  */
+ssize_t
+getrandom (void *buffer, size_t length, unsigned int flags)
+{
+  __set_errno (ENOSYS);
+  return -1;
+}
+
+stub_warning (getrandom)
diff --git a/REORG.TODO/stdlib/getsubopt.c b/REORG.TODO/stdlib/getsubopt.c
new file mode 100644
index 0000000000..7d6772dc1f
--- /dev/null
+++ b/REORG.TODO/stdlib/getsubopt.c
@@ -0,0 +1,79 @@
+/* Parse comma separate list into words.
+   Copyright (C) 1996-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <stdlib.h>
+#include <string.h>
+
+#if !_LIBC
+/* This code is written for inclusion in gnu-libc, and uses names in
+   the namespace reserved for libc.  If we're compiling in gnulib,
+   define those names to be the normal ones instead.  */
+# include "strchrnul.h"
+# undef __strchrnul
+# define __strchrnul strchrnul
+#endif
+
+/* Parse comma separated suboption from *OPTIONP and match against
+   strings in TOKENS.  If found return index and set *VALUEP to
+   optional value introduced by an equal sign.  If the suboption is
+   not part of TOKENS return in *VALUEP beginning of unknown
+   suboption.  On exit *OPTIONP is set to the beginning of the next
+   token or at the terminating NUL character.  */
+int
+getsubopt (char **optionp, char *const *tokens, char **valuep)
+{
+  char *endp, *vstart;
+  int cnt;
+
+  if (**optionp == '\0')
+    return -1;
+
+  /* Find end of next token.  */
+  endp = __strchrnul (*optionp, ',');
+
+  /* Find start of value.  */
+  vstart = memchr (*optionp, '=', endp - *optionp);
+  if (vstart == NULL)
+    vstart = endp;
+
+  /* Try to match the characters between *OPTIONP and VSTART against
+     one of the TOKENS.  */
+  for (cnt = 0; tokens[cnt] != NULL; ++cnt)
+    if (strncmp (*optionp, tokens[cnt], vstart - *optionp) == 0
+	&& tokens[cnt][vstart - *optionp] == '\0')
+      {
+	/* We found the current option in TOKENS.  */
+	*valuep = vstart != endp ? vstart + 1 : NULL;
+
+	if (*endp != '\0')
+	  *endp++ = '\0';
+	*optionp = endp;
+
+	return cnt;
+      }
+
+  /* The current suboption does not match any option.  */
+  *valuep = *optionp;
+
+  if (*endp != '\0')
+    *endp++ = '\0';
+  *optionp = endp;
+
+  return -1;
+}
diff --git a/REORG.TODO/stdlib/gmp-impl.h b/REORG.TODO/stdlib/gmp-impl.h
new file mode 100644
index 0000000000..42d3e4afac
--- /dev/null
+++ b/REORG.TODO/stdlib/gmp-impl.h
@@ -0,0 +1,367 @@
+/* Include file for internal GNU MP types and definitions.
+
+Copyright (C) 1991-2017 Free Software Foundation, Inc.
+
+This file is part of the GNU MP Library.
+
+The GNU MP Library is free software; you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation; either version 2.1 of the License, or (at your
+option) any later version.
+
+The GNU MP 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 Lesser General Public
+License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with the GNU MP Library; see the file COPYING.LIB.  If not, see
+<http://www.gnu.org/licenses/>.  */
+
+/* When using gcc, make sure to use its builtin alloca.  */
+#if ! defined (alloca) && defined (__GNUC__)
+#define alloca __builtin_alloca
+#define HAVE_ALLOCA
+#endif
+
+/* When using cc, do whatever necessary to allow use of alloca.  For many
+   machines, this means including alloca.h.  IBM's compilers need a #pragma
+   in "each module that needs to use alloca".  */
+#if ! defined (alloca)
+/* We need lots of variants for MIPS, to cover all versions and perversions
+   of OSes for MIPS.  */
+#if defined (__mips) || defined (MIPSEL) || defined (MIPSEB) \
+ || defined (_MIPSEL) || defined (_MIPSEB) || defined (__sgi) \
+ || defined (__alpha) || defined (__sparc) || defined (sparc) \
+ || defined (__ksr__)
+#include <alloca.h>
+#define HAVE_ALLOCA
+#endif
+#if defined (_IBMR2)
+#pragma alloca
+#define HAVE_ALLOCA
+#endif
+#if defined (__DECC)
+#define alloca(x) __ALLOCA(x)
+#define HAVE_ALLOCA
+#endif
+#endif
+
+#if (! defined (alloca) && ! defined (HAVE_ALLOCA)) \
+    || defined (USE_STACK_ALLOC)
+#include "stack-alloc.h"
+#else
+#define TMP_DECL(m)
+#define TMP_ALLOC(x) alloca(x)
+#define TMP_MARK(m)
+#define TMP_FREE(m)
+#endif
+
+#ifndef NULL
+#define NULL ((void *) 0)
+#endif
+
+#if ! defined (__GNUC__)
+#define inline			/* Empty */
+#endif
+
+/* Get MAX/MIN macros.  */
+#include <sys/param.h>
+
+/* Field access macros.  */
+#define SIZ(x) ((x)->_mp_size)
+#define PTR(x) ((x)->_mp_d)
+#define EXP(x) ((x)->_mp_exp)
+#define PREC(x) ((x)->_mp_prec)
+#define ALLOC(x) ((x)->_mp_alloc)
+
+#include "gmp-mparam.h"
+/* #include "longlong.h" */
+
+#if defined (__STDC__)  || defined (__cplusplus)
+void *malloc (size_t);
+void *realloc (void *, size_t);
+void free (void *);
+
+extern void *	(*_mp_allocate_func) (size_t);
+extern void *	(*_mp_reallocate_func) (void *, size_t, size_t);
+extern void	(*_mp_free_func) (void *, size_t);
+
+void *_mp_default_allocate (size_t);
+void *_mp_default_reallocate (void *, size_t, size_t);
+void _mp_default_free (void *, size_t);
+
+#else
+
+#define const			/* Empty */
+#define signed			/* Empty */
+
+void *malloc ();
+void *realloc ();
+void free ();
+
+extern void *	(*_mp_allocate_func) ();
+extern void *	(*_mp_reallocate_func) ();
+extern void	(*_mp_free_func) ();
+
+void *_mp_default_allocate ();
+void *_mp_default_reallocate ();
+void _mp_default_free ();
+#endif
+
+/* Copy NLIMBS *limbs* from SRC to DST.  */
+#define MPN_COPY_INCR(DST, SRC, NLIMBS) \
+  do {									\
+    mp_size_t __i;							\
+    for (__i = 0; __i < (NLIMBS); __i++)				\
+      (DST)[__i] = (SRC)[__i];						\
+  } while (0)
+#define MPN_COPY_DECR(DST, SRC, NLIMBS) \
+  do {									\
+    mp_size_t __i;							\
+    for (__i = (NLIMBS) - 1; __i >= 0; __i--)				\
+      (DST)[__i] = (SRC)[__i];						\
+  } while (0)
+#define MPN_COPY MPN_COPY_INCR
+
+/* Zero NLIMBS *limbs* AT DST.  */
+#define MPN_ZERO(DST, NLIMBS) \
+  do {									\
+    mp_size_t __i;							\
+    for (__i = 0; __i < (NLIMBS); __i++)				\
+      (DST)[__i] = 0;							\
+  } while (0)
+
+#define MPN_NORMALIZE(DST, NLIMBS) \
+  do {									\
+    while (NLIMBS > 0)							\
+      {									\
+	if ((DST)[(NLIMBS) - 1] != 0)					\
+	  break;							\
+	NLIMBS--;							\
+      }									\
+  } while (0)
+#define MPN_NORMALIZE_NOT_ZERO(DST, NLIMBS) \
+  do {									\
+    while (1)								\
+      {									\
+	if ((DST)[(NLIMBS) - 1] != 0)					\
+	  break;							\
+	NLIMBS--;							\
+      }									\
+  } while (0)
+
+/* Initialize the MP_INT X with space for NLIMBS limbs.
+   X should be a temporary variable, and it will be automatically
+   cleared out when the running function returns.
+   We use __x here to make it possible to accept both mpz_ptr and mpz_t
+   arguments.  */
+#define MPZ_TMP_INIT(X, NLIMBS) \
+  do {									\
+    mpz_ptr __x = (X);							\
+    __x->_mp_alloc = (NLIMBS);						\
+    __x->_mp_d = (mp_ptr) TMP_ALLOC ((NLIMBS) * BYTES_PER_MP_LIMB);	\
+  } while (0)
+
+#define MPN_MUL_N_RECURSE(prodp, up, vp, size, tspace) \
+  do {									\
+    if ((size) < KARATSUBA_THRESHOLD)					\
+      impn_mul_n_basecase (prodp, up, vp, size);			\
+    else								\
+      impn_mul_n (prodp, up, vp, size, tspace);			\
+  } while (0);
+#define MPN_SQR_N_RECURSE(prodp, up, size, tspace) \
+  do {									\
+    if ((size) < KARATSUBA_THRESHOLD)					\
+      impn_sqr_n_basecase (prodp, up, size);				\
+    else								\
+      impn_sqr_n (prodp, up, size, tspace);				\
+  } while (0);
+
+/* Structure for conversion between internal binary format and
+   strings in base 2..36.  */
+struct bases
+{
+  /* Number of digits in the conversion base that always fits in an mp_limb_t.
+     For example, for base 10 on a machine where a mp_limb_t has 32 bits this
+     is 9, since 10**9 is the largest number that fits into a mp_limb_t.  */
+  int chars_per_limb;
+
+  /* log(2)/log(conversion_base) */
+  float chars_per_bit_exactly;
+
+  /* base**chars_per_limb, i.e. the biggest number that fits a word, built by
+     factors of base.  Exception: For 2, 4, 8, etc, big_base is log2(base),
+     i.e. the number of bits used to represent each digit in the base.  */
+  mp_limb_t big_base;
+
+  /* A BITS_PER_MP_LIMB bit approximation to 1/big_base, represented as a
+     fixed-point number.  Instead of dividing by big_base an application can
+     choose to multiply by big_base_inverted.  */
+  mp_limb_t big_base_inverted;
+};
+
+extern const struct bases __mp_bases[];
+extern mp_size_t __gmp_default_fp_limb_precision;
+
+/* Divide the two-limb number in (NH,,NL) by D, with DI being the largest
+   limb not larger than (2**(2*BITS_PER_MP_LIMB))/D - (2**BITS_PER_MP_LIMB).
+   If this would yield overflow, DI should be the largest possible number
+   (i.e., only ones).  For correct operation, the most significant bit of D
+   has to be set.  Put the quotient in Q and the remainder in R.  */
+#define udiv_qrnnd_preinv(q, r, nh, nl, d, di) \
+  do {									\
+    mp_limb_t _ql __attribute__ ((unused));				\
+    mp_limb_t _q, _r;							\
+    mp_limb_t _xh, _xl;							\
+    umul_ppmm (_q, _ql, (nh), (di));					\
+    _q += (nh);			/* DI is 2**BITS_PER_MP_LIMB too small */\
+    umul_ppmm (_xh, _xl, _q, (d));					\
+    sub_ddmmss (_xh, _r, (nh), (nl), _xh, _xl);				\
+    if (_xh != 0)							\
+      {									\
+	sub_ddmmss (_xh, _r, _xh, _r, 0, (d));				\
+	_q += 1;							\
+	if (_xh != 0)							\
+	  {								\
+	    sub_ddmmss (_xh, _r, _xh, _r, 0, (d));			\
+	    _q += 1;							\
+	  }								\
+      }									\
+    if (_r >= (d))							\
+      {									\
+	_r -= (d);							\
+	_q += 1;							\
+      }									\
+    (r) = _r;								\
+    (q) = _q;								\
+  } while (0)
+/* Like udiv_qrnnd_preinv, but for any value D.  DNORM is D shifted left
+   so that its most significant bit is set.  LGUP is ceil(log2(D)).  */
+#define udiv_qrnnd_preinv2gen(q, r, nh, nl, d, di, dnorm, lgup) \
+  do {									\
+    mp_limb_t n2, n10, n1, nadj, q1;					\
+    mp_limb_t _xh, _xl;							\
+    n2 = ((nh) << (BITS_PER_MP_LIMB - (lgup))) + ((nl) >> 1 >> (l - 1));\
+    n10 = (nl) << (BITS_PER_MP_LIMB - (lgup));				\
+    n1 = ((mp_limb_signed_t) n10 >> (BITS_PER_MP_LIMB - 1));		\
+    nadj = n10 + (n1 & (dnorm));					\
+    umul_ppmm (_xh, _xl, di, n2 - n1);					\
+    add_ssaaaa (_xh, _xl, _xh, _xl, 0, nadj);				\
+    q1 = ~(n2 + _xh);							\
+    umul_ppmm (_xh, _xl, q1, d);					\
+    add_ssaaaa (_xh, _xl, _xh, _xl, nh, nl);				\
+    _xh -= (d);								\
+    (r) = _xl + ((d) & _xh);						\
+    (q) = _xh - q1;							\
+  } while (0)
+/* Exactly like udiv_qrnnd_preinv, but branch-free.  It is not clear which
+   version to use.  */
+#define udiv_qrnnd_preinv2norm(q, r, nh, nl, d, di) \
+  do {									\
+    mp_limb_t n2, n10, n1, nadj, q1;					\
+    mp_limb_t _xh, _xl;							\
+    n2 = (nh);								\
+    n10 = (nl);								\
+    n1 = ((mp_limb_signed_t) n10 >> (BITS_PER_MP_LIMB - 1));		\
+    nadj = n10 + (n1 & (d));						\
+    umul_ppmm (_xh, _xl, di, n2 - n1);					\
+    add_ssaaaa (_xh, _xl, _xh, _xl, 0, nadj);				\
+    q1 = ~(n2 + _xh);							\
+    umul_ppmm (_xh, _xl, q1, d);					\
+    add_ssaaaa (_xh, _xl, _xh, _xl, nh, nl);				\
+    _xh -= (d);								\
+    (r) = _xl + ((d) & _xh);						\
+    (q) = _xh - q1;							\
+  } while (0)
+
+#if defined (__GNUC__)
+/* Define stuff for longlong.h.  */
+typedef unsigned int UQItype	__attribute__ ((mode (QI)));
+typedef 	 int SItype	__attribute__ ((mode (SI)));
+typedef unsigned int USItype	__attribute__ ((mode (SI)));
+typedef		 int DItype	__attribute__ ((mode (DI)));
+typedef unsigned int UDItype	__attribute__ ((mode (DI)));
+#else
+typedef unsigned char UQItype;
+typedef 	 long SItype;
+typedef unsigned long USItype;
+#endif
+
+typedef mp_limb_t UWtype;
+typedef unsigned int UHWtype;
+#define W_TYPE_SIZE BITS_PER_MP_LIMB
+
+/* Internal mpn calls */
+#define impn_mul_n_basecase	__MPN(impn_mul_n_basecase)
+#define impn_mul_n		__MPN(impn_mul_n)
+#define impn_sqr_n_basecase	__MPN(impn_sqr_n_basecase)
+#define impn_sqr_n		__MPN(impn_sqr_n)
+
+#ifndef _PROTO
+#if defined (__STDC__) || defined (__cplusplus)
+#define _PROTO(x) x
+#else
+#define _PROTO(x) ()
+#endif
+#endif
+
+/* Prototypes for internal mpn calls.  */
+extern void impn_mul_n_basecase _PROTO ((mp_ptr prodp, mp_srcptr up,
+					 mp_srcptr vp, mp_size_t size));
+extern void impn_mul_n _PROTO ((mp_ptr prodp, mp_srcptr up, mp_srcptr vp,
+				mp_size_t size, mp_ptr tspace));
+extern void impn_sqr_n_basecase _PROTO ((mp_ptr prodp, mp_srcptr up,
+					 mp_size_t size));
+extern void impn_sqr_n _PROTO ((mp_ptr prodp, mp_srcptr up, mp_size_t size,
+				mp_ptr tspace));
+
+
+
+#ifndef IEEE_DOUBLE_BIG_ENDIAN
+#define IEEE_DOUBLE_BIG_ENDIAN 1
+#endif
+
+#ifndef IEEE_DOUBLE_MIXED_ENDIAN
+#define IEEE_DOUBLE_MIXED_ENDIAN 0
+#endif
+
+#if IEEE_DOUBLE_MIXED_ENDIAN
+union ieee_double_extract
+{
+  struct
+    {
+      unsigned int manh:20;
+      unsigned int exp:11;
+      unsigned int sig:1;
+      unsigned int manl:32;
+    } s;
+  double d;
+};
+#else
+#if IEEE_DOUBLE_BIG_ENDIAN
+union ieee_double_extract
+{
+  struct
+    {
+      unsigned int sig:1;
+      unsigned int exp:11;
+      unsigned int manh:20;
+      unsigned int manl:32;
+    } s;
+  double d;
+};
+#else
+union ieee_double_extract
+{
+  struct
+    {
+      unsigned int manl:32;
+      unsigned int manh:20;
+      unsigned int exp:11;
+      unsigned int sig:1;
+    } s;
+  double d;
+};
+#endif
+#endif
diff --git a/REORG.TODO/stdlib/gmp.h b/REORG.TODO/stdlib/gmp.h
new file mode 100644
index 0000000000..821e3affd0
--- /dev/null
+++ b/REORG.TODO/stdlib/gmp.h
@@ -0,0 +1,623 @@
+/* gmp.h -- Definitions for GNU multiple precision functions.
+
+Copyright (C) 1991-2017 Free Software Foundation, Inc.
+
+This file is part of the GNU MP Library.
+
+The GNU MP Library is free software; you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation; either version 2.1 of the License, or (at your
+option) any later version.
+
+The GNU MP 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 Lesser General Public
+License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with the GNU MP Library; see the file COPYING.LIB.  If not, see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef __GMP_H__
+
+#include <features.h>
+
+#ifndef __GNU_MP__
+#define __GNU_MP__ 2
+#define __need_size_t
+#include <stddef.h>
+#undef __need_size_t
+
+#if defined (__STDC__) || defined (__cplusplus)
+#define __gmp_const const
+#else
+#define __gmp_const
+#endif
+
+#if defined (__GNUC__)
+#define __gmp_inline __inline__
+#else
+#define __gmp_inline
+#endif
+
+#ifndef _EXTERN_INLINE
+#ifdef __GNUC__
+#define _EXTERN_INLINE __extern_inline
+#else
+#define _EXTERN_INLINE static
+#endif
+#endif
+
+#ifdef _SHORT_LIMB
+typedef unsigned int		mp_limb_t;
+typedef int			mp_limb_signed_t;
+#else
+#ifdef _LONG_LONG_LIMB
+typedef unsigned long long int	mp_limb_t;
+typedef long long int		mp_limb_signed_t;
+#else
+typedef unsigned long int	mp_limb_t;
+typedef long int		mp_limb_signed_t;
+#endif
+#endif
+
+typedef mp_limb_t *		mp_ptr;
+typedef __gmp_const mp_limb_t *	mp_srcptr;
+typedef long int		mp_size_t;
+typedef long int		mp_exp_t;
+
+#ifndef __MP_SMALL__
+typedef struct
+{
+  int _mp_alloc;		/* Number of *limbs* allocated and pointed
+				   to by the D field.  */
+  int _mp_size;			/* abs(SIZE) is the number of limbs
+				   the last field points to.  If SIZE
+				   is negative this is a negative
+				   number.  */
+  mp_limb_t *_mp_d;		/* Pointer to the limbs.  */
+} __mpz_struct;
+#else
+typedef struct
+{
+  short int _mp_alloc;		/* Number of *limbs* allocated and pointed
+				   to by the D field.  */
+  short int _mp_size;		/* abs(SIZE) is the number of limbs
+				   the last field points to.  If SIZE
+				   is negative this is a negative
+				   number.  */
+  mp_limb_t *_mp_d;		/* Pointer to the limbs.  */
+} __mpz_struct;
+#endif
+#endif /* __GNU_MP__ */
+
+/* User-visible types.  */
+typedef __mpz_struct MP_INT;
+typedef __mpz_struct mpz_t[1];
+
+/* Structure for rational numbers.  Zero is represented as 0/any, i.e.
+   the denominator is ignored.  Negative numbers have the sign in
+   the numerator.  */
+typedef struct
+{
+  __mpz_struct _mp_num;
+  __mpz_struct _mp_den;
+#if 0
+  int _mp_num_alloc;		/* Number of limbs allocated
+				   for the numerator.  */
+  int _mp_num_size;		/* The absolute value of this field is the
+				   length of the numerator; the sign is the
+				   sign of the entire rational number.  */
+  mp_ptr _mp_num;		/* Pointer to the numerator limbs.  */
+  int _mp_den_alloc;		/* Number of limbs allocated
+				   for the denominator.  */
+  int _mp_den_size;		/* Length of the denominator.  (This field
+				   should always be positive.) */
+  mp_ptr _mp_den;		/* Pointer to the denominator limbs.  */
+#endif
+} __mpq_struct;
+
+typedef __mpq_struct MP_RAT;
+typedef __mpq_struct mpq_t[1];
+
+typedef struct
+{
+  int _mp_prec;			/* Max precision, in number of `mp_limb_t's.
+				   Set by mpf_init and modified by
+				   mpf_set_prec.  The area pointed to
+				   by the `d' field contains `prec' + 1
+				   limbs.  */
+  int _mp_size;			/* abs(SIZE) is the number of limbs
+				   the last field points to.  If SIZE
+				   is negative this is a negative
+				   number.  */
+  mp_exp_t _mp_exp;		/* Exponent, in the base of `mp_limb_t'.  */
+  mp_limb_t *_mp_d;		/* Pointer to the limbs.  */
+} __mpf_struct;
+
+/* typedef __mpf_struct MP_FLOAT; */
+typedef __mpf_struct mpf_t[1];
+
+/* Types for function declarations in gmp files.  */
+/* ??? Should not pollute user name space with these ??? */
+typedef __gmp_const __mpz_struct *mpz_srcptr;
+typedef __mpz_struct *mpz_ptr;
+typedef __gmp_const __mpf_struct *mpf_srcptr;
+typedef __mpf_struct *mpf_ptr;
+typedef __gmp_const __mpq_struct *mpq_srcptr;
+typedef __mpq_struct *mpq_ptr;
+
+#ifndef _PROTO
+#if defined (__STDC__) || defined (__cplusplus)
+#define _PROTO(x) x
+#else
+#define _PROTO(x) ()
+#endif
+#endif
+
+#ifndef __MPN
+#if defined (__STDC__) || defined (__cplusplus)
+#define __MPN(x) __mpn_##x
+#else
+#define __MPN(x) __mpn_/**/x
+#endif
+#endif
+
+#if defined (FILE) || defined (_STDIO_H_) || defined (__STDIO_H__) || defined (H_STDIO)
+#define _GMP_H_HAVE_FILE 1
+#endif
+
+void mp_set_memory_functions _PROTO ((void *(*) (size_t),
+				      void *(*) (void *, size_t, size_t),
+				      void (*) (void *, size_t)));
+extern const int mp_bits_per_limb;
+
+/**************** Integer (i.e. Z) routines.  ****************/
+
+#if defined (__cplusplus)
+extern "C" {
+#endif
+void *_mpz_realloc _PROTO ((mpz_ptr, mp_size_t));
+
+void mpz_abs _PROTO ((mpz_ptr, mpz_srcptr));
+void mpz_add _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
+void mpz_add_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
+void mpz_and _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
+void mpz_array_init _PROTO ((mpz_ptr, mp_size_t, mp_size_t));
+void mpz_cdiv_q _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
+unsigned long int mpz_cdiv_q_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
+void mpz_cdiv_qr _PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr, mpz_srcptr));
+unsigned long int mpz_cdiv_qr_ui _PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr, unsigned long int));
+void mpz_cdiv_r _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
+unsigned long int mpz_cdiv_r_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
+unsigned long int mpz_cdiv_ui _PROTO ((mpz_srcptr, unsigned long int));
+void mpz_clear _PROTO ((mpz_ptr));
+void mpz_clrbit _PROTO ((mpz_ptr, unsigned long int));
+int mpz_cmp _PROTO ((mpz_srcptr, mpz_srcptr));
+int mpz_cmp_si _PROTO ((mpz_srcptr, signed long int));
+int mpz_cmp_ui _PROTO ((mpz_srcptr, unsigned long int));
+void mpz_com _PROTO ((mpz_ptr, mpz_srcptr));
+void mpz_divexact _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
+void mpz_fac_ui _PROTO ((mpz_ptr, unsigned long int));
+void mpz_fdiv_q _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
+void mpz_fdiv_q_2exp _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
+unsigned long int mpz_fdiv_q_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
+void mpz_fdiv_qr _PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr, mpz_srcptr));
+unsigned long int mpz_fdiv_qr_ui _PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr, unsigned long int));
+void mpz_fdiv_r _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
+void mpz_fdiv_r_2exp _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
+unsigned long int mpz_fdiv_r_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
+unsigned long int mpz_fdiv_ui _PROTO ((mpz_srcptr, unsigned long int));
+void mpz_gcd _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
+unsigned long int mpz_gcd_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
+void mpz_gcdext _PROTO ((mpz_ptr, mpz_ptr, mpz_ptr, mpz_srcptr, mpz_srcptr));
+/* signed */ long int mpz_get_si _PROTO ((mpz_srcptr));
+char *mpz_get_str _PROTO ((char *, int, mpz_srcptr));
+unsigned long int mpz_get_ui _PROTO ((mpz_srcptr));
+mp_limb_t mpz_getlimbn _PROTO ((mpz_srcptr, mp_size_t));
+unsigned long int mpz_hamdist _PROTO ((mpz_srcptr, mpz_srcptr));
+void mpz_init _PROTO ((mpz_ptr));
+#ifdef _GMP_H_HAVE_FILE
+size_t mpz_inp_binary _PROTO ((mpz_ptr, FILE *));
+size_t mpz_inp_raw _PROTO ((mpz_ptr, FILE *));
+size_t mpz_inp_str _PROTO ((mpz_ptr, FILE *, int));
+#endif
+void mpz_init_set _PROTO ((mpz_ptr, mpz_srcptr));
+void mpz_init_set_d _PROTO ((mpz_ptr, double));
+void mpz_init_set_si _PROTO ((mpz_ptr, signed long int));
+int mpz_init_set_str _PROTO ((mpz_ptr, const char *, int));
+void mpz_init_set_ui _PROTO ((mpz_ptr, unsigned long int));
+int mpz_invert _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
+void mpz_ior _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
+int mpz_jacobi _PROTO ((mpz_srcptr, mpz_srcptr));
+int mpz_legendre _PROTO ((mpz_srcptr, mpz_srcptr));
+void mpz_mod _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
+void mpz_mul _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
+void mpz_mul_2exp _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
+void mpz_mul_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
+void mpz_neg _PROTO ((mpz_ptr, mpz_srcptr));
+#ifdef _GMP_H_HAVE_FILE
+size_t mpz_out_binary _PROTO ((FILE *, mpz_srcptr));
+size_t mpz_out_raw _PROTO ((FILE *, mpz_srcptr));
+size_t mpz_out_str _PROTO ((FILE *, int, mpz_srcptr));
+#endif
+int mpz_perfect_square_p _PROTO ((mpz_srcptr));
+unsigned long int mpz_popcount _PROTO ((mpz_srcptr));
+void mpz_pow_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
+void mpz_powm _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr, mpz_srcptr));
+void mpz_powm_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int, mpz_srcptr));
+int mpz_probab_prime_p _PROTO ((mpz_srcptr, int));
+void mpz_random _PROTO ((mpz_ptr, mp_size_t));
+void mpz_random2 _PROTO ((mpz_ptr, mp_size_t));
+unsigned long int mpz_scan0 _PROTO ((mpz_srcptr, unsigned long int));
+unsigned long int mpz_scan1 _PROTO ((mpz_srcptr, unsigned long int));
+void mpz_set _PROTO ((mpz_ptr, mpz_srcptr));
+void mpz_set_d _PROTO ((mpz_ptr, double));
+void mpz_set_si _PROTO ((mpz_ptr, signed long int));
+int mpz_set_str _PROTO ((mpz_ptr, const char *, int));
+void mpz_set_ui _PROTO ((mpz_ptr, unsigned long int));
+void mpz_setbit _PROTO ((mpz_ptr, unsigned long int));
+size_t mpz_size _PROTO ((mpz_srcptr));
+size_t mpz_sizeinbase _PROTO ((mpz_srcptr, int));
+void mpz_sqrt _PROTO ((mpz_ptr, mpz_srcptr));
+void mpz_sqrtrem _PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr));
+void mpz_sub _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
+void mpz_sub_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
+void mpz_tdiv_q _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
+void mpz_tdiv_q_2exp _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
+void mpz_tdiv_q_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
+void mpz_tdiv_qr _PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr, mpz_srcptr));
+void mpz_tdiv_qr_ui _PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr, unsigned long int));
+void mpz_tdiv_r _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
+void mpz_tdiv_r_2exp _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
+void mpz_tdiv_r_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
+void mpz_ui_pow_ui _PROTO ((mpz_ptr, unsigned long int, unsigned long int));
+
+/**************** Rational (i.e. Q) routines.  ****************/
+
+void mpq_init _PROTO ((mpq_ptr));
+void mpq_clear _PROTO ((mpq_ptr));
+void mpq_set _PROTO ((mpq_ptr, mpq_srcptr));
+void mpq_set_ui _PROTO ((mpq_ptr, unsigned long int, unsigned long int));
+void mpq_set_si _PROTO ((mpq_ptr, signed long int, unsigned long int));
+void mpq_add _PROTO ((mpq_ptr, mpq_srcptr, mpq_srcptr));
+void mpq_sub _PROTO ((mpq_ptr, mpq_srcptr, mpq_srcptr));
+void mpq_mul _PROTO ((mpq_ptr, mpq_srcptr, mpq_srcptr));
+void mpq_div _PROTO ((mpq_ptr, mpq_srcptr, mpq_srcptr));
+void mpq_neg _PROTO ((mpq_ptr, mpq_srcptr));
+int mpq_cmp _PROTO ((mpq_srcptr, mpq_srcptr));
+int mpq_cmp_ui _PROTO ((mpq_srcptr, unsigned long int, unsigned long int));
+void mpq_inv _PROTO ((mpq_ptr, mpq_srcptr));
+void mpq_set_num _PROTO ((mpq_ptr, mpz_srcptr));
+void mpq_set_den _PROTO ((mpq_ptr, mpz_srcptr));
+void mpq_get_num _PROTO ((mpz_ptr, mpq_srcptr));
+void mpq_get_den _PROTO ((mpz_ptr, mpq_srcptr));
+double mpq_get_d _PROTO ((mpq_srcptr));
+void mpq_canonicalize _PROTO ((mpq_ptr));
+
+/**************** Float (i.e. F) routines.  ****************/
+
+void mpf_abs _PROTO ((mpf_ptr, mpf_srcptr));
+void mpf_add _PROTO ((mpf_ptr, mpf_srcptr, mpf_srcptr));
+void mpf_add_ui _PROTO ((mpf_ptr, mpf_srcptr, unsigned long int));
+void mpf_clear _PROTO ((mpf_ptr));
+int mpf_cmp _PROTO ((mpf_srcptr, mpf_srcptr));
+int mpf_cmp_si _PROTO ((mpf_srcptr, signed long int));
+int mpf_cmp_ui _PROTO ((mpf_srcptr, unsigned long int));
+void mpf_div _PROTO ((mpf_ptr, mpf_srcptr, mpf_srcptr));
+void mpf_div_2exp _PROTO ((mpf_ptr, mpf_srcptr, unsigned long int));
+void mpf_div_ui _PROTO ((mpf_ptr, mpf_srcptr, unsigned long int));
+void mpf_dump _PROTO ((mpf_srcptr));
+int mpf_eq _PROTO ((mpf_srcptr, mpf_srcptr, unsigned long int));
+unsigned long int mpf_get_prec _PROTO ((mpf_srcptr));
+char *mpf_get_str _PROTO ((char *, mp_exp_t *, int, size_t, mpf_srcptr));
+void mpf_init _PROTO ((mpf_ptr));
+void mpf_init2 _PROTO ((mpf_ptr, unsigned long int));
+#ifdef _GMP_H_HAVE_FILE
+size_t mpf_inp_str _PROTO ((mpf_ptr, FILE *, int));
+#endif
+void mpf_init_set _PROTO ((mpf_ptr, mpf_srcptr));
+void mpf_init_set_d _PROTO ((mpf_ptr, double));
+void mpf_init_set_si _PROTO ((mpf_ptr, signed long int));
+int mpf_init_set_str _PROTO ((mpf_ptr, char *, int));
+void mpf_init_set_ui _PROTO ((mpf_ptr, unsigned long int));
+void mpf_mul _PROTO ((mpf_ptr, mpf_srcptr, mpf_srcptr));
+void mpf_mul_2exp _PROTO ((mpf_ptr, mpf_srcptr, unsigned long int));
+void mpf_mul_ui _PROTO ((mpf_ptr, mpf_srcptr, unsigned long int));
+void mpf_neg _PROTO ((mpf_ptr, mpf_srcptr));
+#ifdef _GMP_H_HAVE_FILE
+size_t mpf_out_str _PROTO ((FILE *, int, size_t, mpf_srcptr));
+#endif
+void mpf_random2 _PROTO ((mpf_ptr, mp_size_t, mp_exp_t));
+void mpf_reldiff _PROTO ((mpf_ptr, mpf_srcptr, mpf_srcptr));
+void mpf_set _PROTO ((mpf_ptr, mpf_srcptr));
+void mpf_set_d _PROTO ((mpf_ptr, double));
+void mpf_set_default_prec _PROTO ((unsigned long int));
+void mpf_set_prec _PROTO ((mpf_ptr, unsigned long int));
+void mpf_set_prec_raw _PROTO ((mpf_ptr, unsigned long int));
+void mpf_set_si _PROTO ((mpf_ptr, signed long int));
+int mpf_set_str _PROTO ((mpf_ptr, const char *, int));
+void mpf_set_ui _PROTO ((mpf_ptr, unsigned long int));
+size_t mpf_size _PROTO ((mpf_srcptr));
+void mpf_sqrt _PROTO ((mpf_ptr, mpf_srcptr));
+void mpf_sqrt_ui _PROTO ((mpf_ptr, unsigned long int));
+void mpf_sub _PROTO ((mpf_ptr, mpf_srcptr, mpf_srcptr));
+void mpf_sub_ui _PROTO ((mpf_ptr, mpf_srcptr, unsigned long int));
+void mpf_ui_div _PROTO ((mpf_ptr, unsigned long int, mpf_srcptr));
+void mpf_ui_sub _PROTO ((mpf_ptr, unsigned long int, mpf_srcptr));
+#if defined (__cplusplus)
+}
+#endif
+/************ Low level positive-integer (i.e. N) routines.  ************/
+
+/* This is ugly, but we need to make usr calls reach the prefixed function.  */
+#define mpn_add			__MPN(add)
+#define mpn_add_1		__MPN(add_1)
+#define mpn_add_n		__MPN(add_n)
+#define mpn_addmul_1		__MPN(addmul_1)
+#define mpn_bdivmod		__MPN(bdivmod)
+#define mpn_cmp			__MPN(cmp)
+#define mpn_divmod_1		__MPN(divmod_1)
+#define mpn_divrem		__MPN(divrem)
+#define mpn_divrem_1		__MPN(divrem_1)
+#define mpn_dump		__MPN(dump)
+#define mpn_gcd			__MPN(gcd)
+#define mpn_gcd_1		__MPN(gcd_1)
+#define mpn_gcdext		__MPN(gcdext)
+#define mpn_get_str		__MPN(get_str)
+#define mpn_hamdist		__MPN(hamdist)
+#define mpn_lshift		__MPN(lshift)
+#define mpn_mod_1		__MPN(mod_1)
+#define mpn_mul			__MPN(mul)
+#define mpn_mul_1		__MPN(mul_1)
+#define mpn_mul_n		__MPN(mul_n)
+#define mpn_perfect_square_p	__MPN(perfect_square_p)
+#define mpn_popcount		__MPN(popcount)
+#define mpn_preinv_mod_1	__MPN(preinv_mod_1)
+#define mpn_random2		__MPN(random2)
+#define mpn_rshift		__MPN(rshift)
+#define mpn_scan0		__MPN(scan0)
+#define mpn_scan1		__MPN(scan1)
+#define mpn_set_str		__MPN(set_str)
+#define mpn_sqrtrem		__MPN(sqrtrem)
+#define mpn_sub			__MPN(sub)
+#define mpn_sub_1		__MPN(sub_1)
+#define mpn_sub_n		__MPN(sub_n)
+#define mpn_submul_1		__MPN(submul_1)
+#define mpn_udiv_w_sdiv		__MPN(udiv_w_sdiv)
+
+#if defined (__cplusplus)
+extern "C" {
+#endif
+mp_limb_t mpn_add _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_srcptr,mp_size_t));
+mp_limb_t mpn_add_1 _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb_t));
+mp_limb_t mpn_add_n _PROTO ((mp_ptr, mp_srcptr, mp_srcptr, mp_size_t));
+mp_limb_t mpn_addmul_1 _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb_t));
+mp_limb_t mpn_bdivmod _PROTO ((mp_ptr, mp_ptr, mp_size_t, mp_srcptr, mp_size_t, unsigned long int));
+int mpn_cmp _PROTO ((mp_srcptr, mp_srcptr, mp_size_t));
+mp_limb_t mpn_divmod_1 _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb_t));
+mp_limb_t mpn_divrem _PROTO ((mp_ptr, mp_size_t, mp_ptr, mp_size_t, mp_srcptr, mp_size_t));
+mp_limb_t mpn_divrem_1 _PROTO ((mp_ptr, mp_size_t, mp_srcptr, mp_size_t, mp_limb_t));
+void mpn_dump _PROTO ((mp_srcptr, mp_size_t));
+mp_size_t mpn_gcd _PROTO ((mp_ptr, mp_ptr, mp_size_t, mp_ptr, mp_size_t));
+mp_limb_t mpn_gcd_1 _PROTO ((mp_srcptr, mp_size_t, mp_limb_t));
+mp_size_t mpn_gcdext _PROTO ((mp_ptr, mp_ptr, mp_ptr, mp_size_t, mp_ptr, mp_size_t));
+size_t mpn_get_str _PROTO ((unsigned char *, int, mp_ptr, mp_size_t));
+unsigned long int mpn_hamdist _PROTO ((mp_srcptr, mp_srcptr, mp_size_t));
+mp_limb_t mpn_lshift _PROTO ((mp_ptr, mp_srcptr, mp_size_t, unsigned int));
+mp_limb_t mpn_mod_1 _PROTO ((mp_srcptr, mp_size_t, mp_limb_t));
+mp_limb_t mpn_mul _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t));
+mp_limb_t mpn_mul_1 _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb_t));
+void mpn_mul_n _PROTO ((mp_ptr, mp_srcptr, mp_srcptr, mp_size_t));
+int mpn_perfect_square_p _PROTO ((mp_srcptr, mp_size_t));
+unsigned long int mpn_popcount _PROTO ((mp_srcptr, mp_size_t));
+mp_limb_t mpn_preinv_mod_1 _PROTO ((mp_srcptr, mp_size_t, mp_limb_t, mp_limb_t));
+void mpn_random2 _PROTO ((mp_ptr, mp_size_t));
+mp_limb_t mpn_rshift _PROTO ((mp_ptr, mp_srcptr, mp_size_t, unsigned int));
+unsigned long int mpn_scan0 _PROTO ((mp_srcptr, unsigned long int));
+unsigned long int mpn_scan1 _PROTO ((mp_srcptr, unsigned long int));
+mp_size_t mpn_set_str _PROTO ((mp_ptr, const unsigned char *, size_t, int));
+mp_size_t mpn_sqrtrem _PROTO ((mp_ptr, mp_ptr, mp_srcptr, mp_size_t));
+mp_limb_t mpn_sub _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_srcptr,mp_size_t));
+mp_limb_t mpn_sub_1 _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb_t));
+mp_limb_t mpn_sub_n _PROTO ((mp_ptr, mp_srcptr, mp_srcptr, mp_size_t));
+mp_limb_t mpn_submul_1 _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb_t));
+#if defined (__cplusplus)
+}
+#endif
+
+#if defined (__GNUC__) || defined (_FORCE_INLINES)
+_EXTERN_INLINE mp_limb_t
+#if defined (__STDC__) || defined (__cplusplus)
+mpn_add_1 (register mp_ptr res_ptr,
+	   register mp_srcptr s1_ptr,
+	   register mp_size_t s1_size,
+	   register mp_limb_t s2_limb)
+#else
+mpn_add_1 (res_ptr, s1_ptr, s1_size, s2_limb)
+     register mp_ptr res_ptr;
+     register mp_srcptr s1_ptr;
+     register mp_size_t s1_size;
+     register mp_limb_t s2_limb;
+#endif
+{
+  register mp_limb_t x;
+
+  x = *s1_ptr++;
+  s2_limb = x + s2_limb;
+  *res_ptr++ = s2_limb;
+  if (s2_limb < x)
+    {
+      while (--s1_size != 0)
+	{
+	  x = *s1_ptr++ + 1;
+	  *res_ptr++ = x;
+	  if (x != 0)
+	    goto fin;
+	}
+
+      return 1;
+    }
+
+ fin:
+  if (res_ptr != s1_ptr)
+    {
+      mp_size_t i;
+      for (i = 0; i < s1_size - 1; i++)
+	res_ptr[i] = s1_ptr[i];
+    }
+  return 0;
+}
+
+_EXTERN_INLINE mp_limb_t
+#if defined (__STDC__) || defined (__cplusplus)
+mpn_add (register mp_ptr res_ptr,
+	 register mp_srcptr s1_ptr,
+	 register mp_size_t s1_size,
+	 register mp_srcptr s2_ptr,
+	 register mp_size_t s2_size)
+#else
+mpn_add (res_ptr, s1_ptr, s1_size, s2_ptr, s2_size)
+     register mp_ptr res_ptr;
+     register mp_srcptr s1_ptr;
+     register mp_size_t s1_size;
+     register mp_srcptr s2_ptr;
+     register mp_size_t s2_size;
+#endif
+{
+  mp_limb_t cy_limb = 0;
+
+  if (s2_size != 0)
+    cy_limb = mpn_add_n (res_ptr, s1_ptr, s2_ptr, s2_size);
+
+  if (s1_size - s2_size != 0)
+    cy_limb = mpn_add_1 (res_ptr + s2_size,
+			 s1_ptr + s2_size,
+			 s1_size - s2_size,
+			 cy_limb);
+  return cy_limb;
+}
+
+_EXTERN_INLINE mp_limb_t
+#if defined (__STDC__) || defined (__cplusplus)
+mpn_sub_1 (register mp_ptr res_ptr,
+	   register mp_srcptr s1_ptr,
+	   register mp_size_t s1_size,
+	   register mp_limb_t s2_limb)
+#else
+mpn_sub_1 (res_ptr, s1_ptr, s1_size, s2_limb)
+     register mp_ptr res_ptr;
+     register mp_srcptr s1_ptr;
+     register mp_size_t s1_size;
+     register mp_limb_t s2_limb;
+#endif
+{
+  register mp_limb_t x;
+
+  x = *s1_ptr++;
+  s2_limb = x - s2_limb;
+  *res_ptr++ = s2_limb;
+  if (s2_limb > x)
+    {
+      while (--s1_size != 0)
+	{
+	  x = *s1_ptr++;
+	  *res_ptr++ = x - 1;
+	  if (x != 0)
+	    goto fin;
+	}
+
+      return 1;
+    }
+
+ fin:
+  if (res_ptr != s1_ptr)
+    {
+      mp_size_t i;
+      for (i = 0; i < s1_size - 1; i++)
+	res_ptr[i] = s1_ptr[i];
+    }
+  return 0;
+}
+
+_EXTERN_INLINE mp_limb_t
+#if defined (__STDC__) || defined (__cplusplus)
+mpn_sub (register mp_ptr res_ptr,
+	 register mp_srcptr s1_ptr,
+	 register mp_size_t s1_size,
+	 register mp_srcptr s2_ptr,
+	 register mp_size_t s2_size)
+#else
+mpn_sub (res_ptr, s1_ptr, s1_size, s2_ptr, s2_size)
+     register mp_ptr res_ptr;
+     register mp_srcptr s1_ptr;
+     register mp_size_t s1_size;
+     register mp_srcptr s2_ptr;
+     register mp_size_t s2_size;
+#endif
+{
+  mp_limb_t cy_limb = 0;
+
+  if (s2_size != 0)
+    cy_limb = mpn_sub_n (res_ptr, s1_ptr, s2_ptr, s2_size);
+
+  if (s1_size - s2_size != 0)
+    cy_limb = mpn_sub_1 (res_ptr + s2_size,
+			 s1_ptr + s2_size,
+			 s1_size - s2_size,
+			 cy_limb);
+  return cy_limb;
+}
+#endif /* __GNUC__ */
+
+/* Allow faster testing for negative, zero, and positive.  */
+#define mpz_sgn(Z) ((Z)->_mp_size < 0 ? -1 : (Z)->_mp_size > 0)
+#define mpf_sgn(F) ((F)->_mp_size < 0 ? -1 : (F)->_mp_size > 0)
+#define mpq_sgn(Q) ((Q)->_mp_num._mp_size < 0 ? -1 : (Q)->_mp_num._mp_size > 0)
+
+/* Allow direct user access to numerator and denominator of a mpq_t object.  */
+#define mpq_numref(Q) (&((Q)->_mp_num))
+#define mpq_denref(Q) (&((Q)->_mp_den))
+
+/* When using GCC, optimize certain common comparisons.  */
+#if defined (__GNUC__)
+#define mpz_cmp_ui(Z,UI) \
+  (__builtin_constant_p (UI) && (UI) == 0				\
+   ? mpz_sgn (Z) : mpz_cmp_ui (Z,UI))
+#define mpz_cmp_si(Z,UI) \
+  (__builtin_constant_p (UI) && (UI) == 0 ? mpz_sgn (Z)			\
+   : __builtin_constant_p (UI) && (UI) > 0 ? mpz_cmp_ui (Z,UI)		\
+   : mpz_cmp_si (Z,UI))
+#define mpq_cmp_ui(Q,NUI,DUI) \
+  (__builtin_constant_p (NUI) && (NUI) == 0				\
+   ? mpq_sgn (Q) : mpq_cmp_ui (Q,NUI,DUI))
+#endif
+
+#define mpn_divmod(qp,np,nsize,dp,dsize) mpn_divrem (qp,0,np,nsize,dp,dsize)
+#if 0
+#define mpn_divmod_1(qp,np,nsize,dlimb) mpn_divrem_1 (qp,0,np,nsize,dlimb)
+#endif
+
+/* Compatibility with GMP 1.  */
+#define mpz_mdiv	mpz_fdiv_q
+#define mpz_mdivmod	mpz_fdiv_qr
+#define mpz_mmod	mpz_fdiv_r
+#define mpz_mdiv_ui	mpz_fdiv_q_ui
+#define mpz_mdivmod_ui(q,r,n,d) \
+  ((r == 0) ? mpz_fdiv_q_ui (q,n,d) : mpz_fdiv_qr_ui (q,r,n,d))
+#define mpz_mmod_ui(r,n,d) \
+  ((r == 0) ? mpz_fdiv_ui (n,d) : mpz_fdiv_r_ui (r,n,d))
+
+/* Useful synonyms, but not quite compatible with GMP 1.  */
+#define mpz_div		mpz_fdiv_q
+#define mpz_divmod	mpz_fdiv_qr
+#define mpz_div_ui	mpz_fdiv_q_ui
+#define mpz_divmod_ui	mpz_fdiv_qr_ui
+#define mpz_mod_ui	mpz_fdiv_r_ui
+#define mpz_div_2exp	mpz_fdiv_q_2exp
+#define mpz_mod_2exp	mpz_fdiv_r_2exp
+
+#define __GNU_MP_VERSION 2
+#define __GNU_MP_VERSION_MINOR 0
+#define __GMP_H__
+#endif /* __GMP_H__ */
diff --git a/REORG.TODO/stdlib/grouping.c b/REORG.TODO/stdlib/grouping.c
new file mode 100644
index 0000000000..63ef4c1644
--- /dev/null
+++ b/REORG.TODO/stdlib/grouping.c
@@ -0,0 +1,201 @@
+/* Internal header for proving correct grouping in strings of numbers.
+   Copyright (C) 1995-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <limits.h>
+#include <stddef.h>
+#include <string.h>
+
+#ifndef MAX
+#define MAX(a,b)	({ typeof(a) _a = (a); typeof(b) _b = (b); \
+			   _a > _b ? _a : _b; })
+#endif
+
+#ifdef USE_WIDE_CHAR
+# include <wctype.h>
+# define L_(Ch) L##Ch
+# define UCHAR_TYPE wint_t
+# define STRING_TYPE wchar_t
+#else
+# define L_(Ch) Ch
+# define UCHAR_TYPE unsigned char
+# define STRING_TYPE char
+#endif
+
+#include "grouping.h"
+
+/* Find the maximum prefix of the string between BEGIN and END which
+   satisfies the grouping rules.  It is assumed that at least one digit
+   follows BEGIN directly.  */
+
+const STRING_TYPE *
+#ifdef USE_WIDE_CHAR
+__correctly_grouped_prefixwc (const STRING_TYPE *begin, const STRING_TYPE *end,
+			      wchar_t thousands,
+#else
+__correctly_grouped_prefixmb (const STRING_TYPE *begin, const STRING_TYPE *end,
+			      const char *thousands,
+#endif
+			      const char *grouping)
+{
+#ifndef USE_WIDE_CHAR
+  size_t thousands_len;
+  int cnt;
+#endif
+
+  if (grouping == NULL)
+    return end;
+
+#ifndef USE_WIDE_CHAR
+  thousands_len = strlen (thousands);
+#endif
+
+  while (end > begin)
+    {
+      const STRING_TYPE *cp = end - 1;
+      const char *gp = grouping;
+
+      /* Check first group.  */
+      while (cp >= begin)
+	{
+#ifdef USE_WIDE_CHAR
+	  if (*cp == thousands)
+	    break;
+#else
+	  if (cp[thousands_len - 1] == *thousands)
+	    {
+	      for (cnt = 1; thousands[cnt] != '\0'; ++cnt)
+		if (thousands[cnt] != cp[thousands_len - 1 - cnt])
+		  break;
+	      if (thousands[cnt] == '\0')
+		break;
+	    }
+#endif
+	  --cp;
+	}
+
+      /* We allow the representation to contain no grouping at all even if
+	 the locale specifies we can have grouping.  */
+      if (cp < begin)
+	return end;
+
+      if (end - cp == (int) *gp + 1)
+	{
+	  /* This group matches the specification.  */
+
+	  const STRING_TYPE *new_end;
+
+	  if (cp < begin)
+	    /* There is just one complete group.  We are done.  */
+	    return end;
+
+	  /* CP points to a thousands separator character.  The preceding
+	     remainder of the string from BEGIN to NEW_END is the part we
+	     will consider if there is a grouping error in this trailing
+	     portion from CP to END.  */
+	  new_end = cp - 1;
+
+	  /* Loop while the grouping is correct.  */
+	  while (1)
+	    {
+	      /* Get the next grouping rule.  */
+	      ++gp;
+	      if (*gp == 0)
+		/* If end is reached use last rule.  */
+	        --gp;
+
+	      /* Skip the thousands separator.  */
+	      --cp;
+
+	      if (*gp == CHAR_MAX
+#if CHAR_MIN < 0
+		  || *gp < 0
+#endif
+		  )
+	        {
+	          /* No more thousands separators are allowed to follow.  */
+	          while (cp >= begin)
+		    {
+#ifdef USE_WIDE_CHAR
+		      if (*cp == thousands)
+			break;
+#else
+		      for (cnt = 0; thousands[cnt] != '\0'; ++cnt)
+			if (thousands[cnt] != cp[thousands_len - cnt - 1])
+			  break;
+		      if (thousands[cnt] == '\0')
+			break;
+#endif
+		      --cp;
+		    }
+
+	          if (cp < begin)
+		    /* OK, only digits followed.  */
+		    return end;
+	        }
+	      else
+	        {
+		  /* Check the next group.  */
+	          const STRING_TYPE *group_end = cp;
+
+		  while (cp >= begin)
+		    {
+#ifdef USE_WIDE_CHAR
+		      if (*cp == thousands)
+			break;
+#else
+		      for (cnt = 0; thousands[cnt] != '\0'; ++cnt)
+			if (thousands[cnt] != cp[thousands_len - cnt - 1])
+			  break;
+		      if (thousands[cnt] == '\0')
+			break;
+#endif
+		      --cp;
+		    }
+
+		  if (cp < begin && group_end - cp <= (int) *gp)
+		    /* Final group is correct.  */
+		    return end;
+
+		  if (cp < begin || group_end - cp != (int) *gp)
+		    /* Incorrect group.  Punt.  */
+		    break;
+		}
+	    }
+
+	  /* The trailing portion of the string starting at NEW_END
+	     contains a grouping error.  So we will look for a correctly
+	     grouped number in the preceding portion instead.  */
+	  end = new_end;
+	}
+      else
+	{
+	  /* Even the first group was wrong; determine maximum shift.  */
+	  if (end - cp > (int) *gp + 1)
+	    end = cp + (int) *gp + 1;
+	  else if (cp < begin)
+	    /* This number does not fill the first group, but is correct.  */
+	    return end;
+	  else
+	    /* CP points to a thousands separator character.  */
+	    end = cp;
+	}
+    }
+
+  return MAX (begin, end);
+}
diff --git a/REORG.TODO/stdlib/grouping.h b/REORG.TODO/stdlib/grouping.h
new file mode 100644
index 0000000000..d77b6e1105
--- /dev/null
+++ b/REORG.TODO/stdlib/grouping.h
@@ -0,0 +1,33 @@
+/* Internal header for proving correct grouping in strings of numbers.
+   Copyright (C) 1995-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* Find the maximum prefix of the string between BEGIN and END which
+   satisfies the grouping rules.  It is assumed that at least one digit
+   follows BEGIN directly.  */
+extern const wchar_t *__correctly_grouped_prefixwc (const wchar_t *begin,
+						    const wchar_t *end,
+						    wchar_t thousands,
+						    const char *grouping)
+     attribute_hidden;
+
+extern const char *__correctly_grouped_prefixmb (const char *begin,
+						 const char *end,
+						 const char *thousands,
+						 const char *grouping)
+     attribute_hidden;
diff --git a/REORG.TODO/stdlib/groupingwc.c b/REORG.TODO/stdlib/groupingwc.c
new file mode 100644
index 0000000000..cd9675ee58
--- /dev/null
+++ b/REORG.TODO/stdlib/groupingwc.c
@@ -0,0 +1,2 @@
+#define USE_WIDE_CHAR	1
+#include "grouping.c"
diff --git a/REORG.TODO/stdlib/inlines.c b/REORG.TODO/stdlib/inlines.c
new file mode 100644
index 0000000000..5f1065ea13
--- /dev/null
+++ b/REORG.TODO/stdlib/inlines.c
@@ -0,0 +1,3 @@
+#define _FORCE_INLINES
+#define _EXTERN_INLINE /* empty */
+#include <gmp.h>
diff --git a/REORG.TODO/stdlib/isomac.c b/REORG.TODO/stdlib/isomac.c
new file mode 100644
index 0000000000..d12d1ff661
--- /dev/null
+++ b/REORG.TODO/stdlib/isomac.c
@@ -0,0 +1,447 @@
+/* Check system header files for ISO 9899:1990 (ISO C) compliance.
+   Copyright (C) 1996-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Jens Schweikhardt <schweikh@noc.dfn.de>, 1996.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* This is a simple minded program that tries to find illegal macro
+   definitions in system header files. Illegal macro definitions are
+   those not from the implementation namespace (i.e. not starting with
+   an underscore) or not matching any identifier mandated by The
+   Standard. Some common macro names are considered okay, e.g. all those
+   beginning with E (which may be defined in <errno.h>) or ending in
+   _MAX. See the arrays prefix[] and suffix[] below for details.
+
+   In a compliant implementation no other macros can be defined, because
+   you could write strictly conforming programs that may fail to compile
+   due to syntax errors: suppose <stdio.h> defines PIPE_BUF, then the
+   conforming
+
+   #include <assert.h>
+   #include <stdio.h>      <- or where the bogus macro is defined
+   #include <string.h>
+   #define STR(x) #x
+   #define XSTR(x) STR(x)
+   int main (void)
+   {
+     int PIPE_BUF = 0;
+     assert (strcmp ("PIPE_BUF", XSTR (PIPE_BUF)) == 0);
+     return 0;
+   }
+
+   is expected to compile and meet the assertion. If it does not, your
+   compiler compiles some other language than Standard C.
+
+   REQUIREMENTS:
+     This program calls gcc to get the list of defined macros. If you
+     don't have gcc you're probably out of luck unless your compiler or
+     preprocessor has something similar to gcc's -dM option. Tune
+     PRINT_MACROS in this case. This program assumes headers are found
+     under /usr/include and that there is a writable /tmp directory.
+     Tune SYSTEM_INCLUDE if your system differs.
+     #define BROKEN_SYSTEM if system(NULL) bombs -- one more violation
+     of ISO C, by the way.
+
+   OUTPUT:
+     Each header file name is printed, followed by illegal macro names
+     and their definition. For the above example, you would see
+     ...
+     /usr/include/stdio.h
+     #define PIPE_BUF 5120
+     ...
+     If your implementation does not yet incorporate Amendment 1 you
+     will see messages about iso646.h, wctype.h and wchar.h not being
+     found.  */
+
+#ifndef _GNU_SOURCE
+# define _GNU_SOURCE 1
+#endif
+
+#include <ctype.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#define HEADER_MAX          256
+
+static const char *macrofile;
+
+/* ISO C header names including Amendment 1 (without ".h" suffix).  */
+static char *header[] =
+{
+  "assert", "ctype", "errno", "float", "iso646", "limits", "locale",
+  "math", "setjmp", "signal", "stdarg", "stddef", "stdio", "stdlib",
+  "string", "time", "wchar", "wctype"
+};
+
+/* Macros with these prefixes are considered okay.  */
+static char *prefix[] =
+{
+  "_", "E", "is", "str", "mem", "SIG", "FLT_", "DBL_", "LDBL_",
+  "LC_", "wmem", "wcs"
+};
+
+/* Macros with these suffixes are considered okay.  Will not work for
+   parametrized macros with arguments.  */
+static char *suffix[] =
+{
+  "_MAX", "_MIN"
+};
+
+/* These macros are considered okay. In fact, these are just more prefixes.  */
+static char *macros[] =
+{
+  "BUFSIZ", "CHAR_BIT", "CHAR_MAX", "CHAR_MIN", "CLOCKS_PER_SEC",
+  "DBL_DIG", "DBL_EPSILON", "DBL_MANT_DIG", "DBL_MAX",
+  "DBL_MAX_10_EXP", "DBL_MAX_EXP", "DBL_MIN", "DBL_MIN_10_EXP",
+  "DBL_MIN_EXP", "EDOM", "EILSEQ", "EOF", "ERANGE", "EXIT_FAILURE",
+  "EXIT_SUCCESS", "FILENAME_MAX", "FLT_DIG", "FLT_EPSILON",
+  "FLT_MANT_DIG", "FLT_MAX", "FLT_MAX_10_EXP", "FLT_MAX_EXP",
+  "FLT_MIN", "FLT_MIN_10_EXP", "FLT_MIN_EXP", "FLT_RADIX",
+  "FLT_ROUNDS", "FOPEN_MAX", "HUGE_VAL", "INT_MAX", "INT_MIN",
+  "LC_ALL", "LC_COLLATE", "LC_CTYPE", "LC_MONETARY", "LC_NUMERIC",
+  "LC_TIME", "LDBL_DIG", "LDBL_EPSILON", "LDBL_MANT_DIG", "LDBL_MAX",
+  "LDBL_MAX_10_EXP", "LDBL_MAX_EXP", "LDBL_MIN", "LDBL_MIN_10_EXP",
+  "LDBL_MIN_EXP", "LONG_MAX", "LONG_MIN", "L_tmpnam", "MB_CUR_MAX",
+  "MB_LEN_MAX", "NDEBUG", "NULL", "RAND_MAX", "SCHAR_MAX",
+  "SCHAR_MIN", "SEEK_CUR", "SEEK_END", "SEEK_SET", "SHRT_MAX",
+  "SHRT_MIN", "SIGABRT", "SIGFPE", "SIGILL", "SIGINT", "SIGSEGV",
+  "SIGTERM", "SIG_DFL", "SIG_ERR", "SIG_IGN", "TMP_MAX", "UCHAR_MAX",
+  "UINT_MAX", "ULONG_MAX", "USHRT_MAX", "WCHAR_MAX", "WCHAR_MIN",
+  "WEOF", "_IOFBF", "_IOLBF", "_IONBF", "abort", "abs", "acos",
+  "acosf", "acosl", "and", "and_eq", "asctime", "asin", "asinf",
+  "asinl", "assert", "atan", "atan2", "atan2f", "atan2l", "atanf",
+  "atanl", "atexit", "atof", "atoi", "atol", "bitand", "bitor",
+  "bsearch", "btowc", "calloc", "ceil", "ceilf", "ceill", "clearerr",
+  "clock", "clock_t", "compl", "cos", "cosf", "cosh", "coshf",
+  "coshl", "cosl", "ctime", "difftime", "div", "div_t", "errno",
+  "exit", "exp", "expf", "expl", "fabs", "fabsf", "fabsl", "fclose",
+  "feof", "ferror", "fflush", "fgetc", "fgetpos", "fgets", "fgetwc",
+  "fgetws", "floor", "floorf", "floorl", "fmod", "fmodf", "fmodl",
+  "fopen", "fprintf", "fputc", "fputs", "fputwc", "fputws", "fread",
+  "free", "freopen", "frexp", "frexpf", "frexpl", "fscanf", "fseek",
+  "fsetpos", "ftell", "fwide", "fwprintf", "fwrite", "fwscanf",
+  "getc", "getchar", "getenv", "gets", "getwc", "getwchar", "gmtime",
+  "isalnum", "isalpha", "iscntrl", "isdigit", "isgraph", "islower",
+  "isprint", "ispunct", "isspace", "isupper", "iswalnum", "iswalpha",
+  "iswcntrl", "iswctype", "iswdigit", "iswgraph", "iswlower",
+  "iswprint", "iswpunct", "iswspace", "iswupper", "iswxdigit",
+  "isxdigit", "labs", "ldexp", "ldexpf", "ldexpl", "ldiv", "ldiv_t",
+  "localeconv", "localtime", "log", "log10", "log10f", "log10l",
+  "logf", "logl", "longjmp", "malloc", "mblen", "mbrlen", "mbrtowc",
+  "mbsinit", "mbsrtowcs", "mbstate_t", "mbstowcs", "mbtowc", "memchr",
+  "memcmp", "memcpy", "memmove", "memset", "mktime", "modf", "modff",
+  "modfl", "not", "not_eq", "offsetof", "or", "or_eq", "perror",
+  "pow", "powf", "powl", "printf", "ptrdiff_t", "putc", "putchar",
+  "puts", "putwc", "putwchar", "qsort", "raise", "rand", "realloc",
+  "remove", "rename", "rewind", "scanf", "setbuf", "setjmp",
+  "setlocale", "setvbuf", "sig_atomic_t", "signal", "sin", "sinf",
+  "sinh", "sinhf", "sinhl", "sinl", "size_t", "sprintf", "sqrt",
+  "sqrtf", "sqrtl", "srand", "sscanf", "stderr", "stdin", "stdout",
+  "strcat", "strchr", "strcmp", "strcoll", "strcpy", "strcspn",
+  "strerror", "strftime", "strlen", "strncat", "strncmp", "strncpy",
+  "strpbrk", "strrchr", "strspn", "strstr", "strtod", "strtok",
+  "strtol", "strtoul", "strxfrm", "swprintf", "swscanf", "system",
+  "tan", "tanf", "tanh", "tanhf", "tanhl", "tanl", "time", "time_t",
+  "tmpfile", "tmpnam", "tolower", "toupper", "towctrans", "towlower",
+  "towupper", "ungetc", "ungetwc", "va_arg", "va_copy", "va_end", "va_start",
+  "vfprintf", "vfwprintf", "vprintf", "vsprintf", "vswprintf",
+  "vwprintf", "wchar_t", "wcrtomb", "wcscat", "wcschr", "wcscmp",
+  "wcscoll", "wcscpy", "wcscspn", "wcsftime", "wcslen", "wcsncat",
+  "wcsncmp", "wcsncpy", "wcspbrk", "wcsrchr", "wcsrtombs", "wcsspn",
+  "wcsstr", "wcstod", "wcstok", "wcstol", "wcstombs", "wcstoul",
+  "wcsxfrm", "wctob", "wctomb", "wctrans", "wctrans_t", "wctype",
+  "wctype_t", "wint_t", "wmemchr", "wmemcmp", "wmemcpy", "wmemmove",
+  "wmemset", "wprintf", "wscanf", "xor", "xor_eq"
+};
+
+#define NUMBER_OF_HEADERS              (sizeof header / sizeof *header)
+#define NUMBER_OF_PREFIXES             (sizeof prefix / sizeof *prefix)
+#define NUMBER_OF_SUFFIXES             (sizeof suffix / sizeof *suffix)
+#define NUMBER_OF_MACROS               (sizeof macros / sizeof *macros)
+
+
+/* Format string to build command to invoke compiler.  */
+static const char fmt[] = "\
+echo \"#include <%s>\" |\
+%s -E -dM -ansi -pedantic %s -D_LIBC -D_ISOMAC \
+-DIN_MODULE=MODULE_extramodules -I. \
+-isystem `%s --print-prog-name=include` - 2> /dev/null > %s";
+
+
+/* The compiler we use (given on the command line).  */
+char *CC;
+/* The -I parameters for CC to find all headers.  */
+char *INC;
+
+static char *xstrndup (const char *, size_t);
+static const char **get_null_defines (void);
+static int check_header (const char *, const char **);
+
+int
+main (int argc, char *argv[])
+{
+  int h;
+  int result = 0;
+  const char **ignore_list;
+
+  CC = argc > 1 ? argv[1] : "gcc";
+  INC = argc > 2 ? argv[2] : "";
+
+  if (system (NULL) == 0)
+    {
+      puts ("Sorry, no command processor.");
+      return EXIT_FAILURE;
+    }
+
+  /* First get list of symbols which are defined by the compiler.  */
+  ignore_list = get_null_defines ();
+
+  fputs ("Tested files:\n", stdout);
+
+  for (h = 0; h < NUMBER_OF_HEADERS; ++h)
+    {
+      char file_name[HEADER_MAX];
+      sprintf (file_name, "%s.h", header[h]);
+      result |= check_header (file_name, ignore_list);
+    }
+
+  /* The test suite should return errors but for now this is not
+     practical.  Give a warning and ask the user to correct the bugs.  */
+  return result;
+}
+
+
+static char *
+xstrndup (const char *s, size_t n)
+{
+  size_t len = n;
+  char *new = malloc (len + 1);
+
+  if (new == NULL)
+    return NULL;
+
+  new[len] = '\0';
+  return memcpy (new, s, len);
+}
+
+
+static const char **
+get_null_defines (void)
+{
+  char line[BUFSIZ], *command;
+  char **result = NULL;
+  size_t result_len = 0;
+  size_t result_max = 0;
+  FILE *input;
+  int first = 1;
+
+  macrofile = tmpnam (NULL);
+
+  command = malloc (sizeof fmt + sizeof "/dev/null" + 2 * strlen (CC)
+		    + strlen (INC) + strlen (macrofile));
+
+  if (command == NULL)
+    {
+      puts ("No more memory.");
+      exit (1);
+    }
+
+  sprintf (command, fmt, "/dev/null", CC, INC, CC, macrofile);
+
+  if (system (command))
+    {
+      puts ("system() returned nonzero");
+      free (command);
+      return NULL;
+    }
+  free (command);
+  input = fopen (macrofile, "r");
+
+  if (input == NULL)
+    {
+      printf ("Could not read %s: ", macrofile);
+      perror (NULL);
+      return NULL;
+    }
+
+  while (fgets (line, sizeof line, input) != NULL)
+    {
+      int i, okay = 0;
+      size_t endmac;
+      char *start, *end;
+      if (strlen (line) < 9 || line[7] != ' ')
+	{ /* "#define A" */
+	  printf ("Malformed input, expected '#define MACRO'\ngot '%s'\n",
+		  line);
+	  continue;
+	}
+      if (line[8] == '_')
+	/* It's a safe identifier.  */
+	continue;
+      if (result_len == result_max)
+	{
+	  result_max += 10;
+	  result = realloc (result, result_max * sizeof (char **));
+	  if (result == NULL)
+	    {
+	      puts ("No more memory.");
+	      exit (1);
+	    }
+	}
+      start = &line[8];
+      for (end = start + 1; !isspace (*end) && *end != '\0'; ++end)
+	;
+      result[result_len] = xstrndup (start, end - start);
+
+      if (strcmp (result[result_len], "IN_MODULE") != 0)
+	{
+	  if (first)
+	    {
+	      fputs ("The following identifiers will be ignored since the compiler defines them\nby default:\n", stdout);
+	      first = 0;
+	    }
+	  puts (result[result_len]);
+	}
+      ++result_len;
+    }
+  if (result_len == result_max)
+    {
+      result_max += 1;
+      result = realloc (result, result_max * sizeof (char **));
+      if (result == NULL)
+	{
+	  puts ("No more memory.");
+	  exit (1);
+	}
+    }
+  result[result_len] = NULL;
+  fclose (input);
+  remove (macrofile);
+
+  return (const char **) result;
+}
+
+
+static int
+check_header (const char *file_name, const char **except)
+{
+  char line[BUFSIZ], *command;
+  FILE *input;
+  int result = 0;
+
+  command = malloc (sizeof fmt + strlen (file_name) + 2 * strlen (CC)
+		    + strlen (INC) + strlen (macrofile));
+
+  if (command == NULL)
+    {
+      puts ("No more memory.");
+      exit (1);
+    }
+
+  puts (file_name);
+  sprintf (command, fmt, file_name, CC, INC, CC, macrofile);
+
+  if (system (command))
+    {
+      puts ("system() returned nonzero");
+      result = 1;
+    }
+  free (command);
+  input = fopen (macrofile, "r");
+
+  if (input == NULL)
+    {
+      printf ("Could not read %s: ", macrofile);
+      perror (NULL);
+      return 1;
+    }
+
+  while (fgets (line, sizeof line, input) != NULL)
+    {
+      int i, okay = 0;
+      size_t endmac;
+      const char **cpp;
+      if (strlen (line) < 9 || line[7] != ' ')
+	{ /* "#define A" */
+	  printf ("Malformed input, expected '#define MACRO'\ngot '%s'\n",
+		  line);
+	  result = 1;
+	  continue;
+	}
+      for (i = 0; i < NUMBER_OF_PREFIXES; ++i)
+	{
+	  if (!strncmp (line+8, prefix[i], strlen (prefix[i]))) {
+	    ++okay;
+	    break;
+	  }
+	}
+      if (okay)
+	continue;
+      for (i = 0; i < NUMBER_OF_MACROS; ++i)
+	{
+	  if (!strncmp (line + 8, macros[i], strlen (macros[i])))
+	    {
+	      ++okay;
+	      break;
+	    }
+	}
+      if (okay)
+	continue;
+      /* Find next char after the macro identifier; this can be either
+	 a space or an open parenthesis.  */
+      endmac = strcspn (line + 8, " (");
+      if (line[8+endmac] == '\0')
+	{
+	  printf ("malformed input, expected '#define MACRO VALUE'\n"
+		  "got '%s'\n", line);
+	  result = 1;
+	  continue;
+	}
+      for (i = 0; i < NUMBER_OF_SUFFIXES; ++i)
+	{
+	  size_t len = strlen (suffix[i]);
+	  if (!strncmp (line + 8 + endmac - len, suffix[i], len))
+	    {
+	      ++okay;
+	      break;
+	    }
+	}
+      if (okay)
+	continue;
+      if (except != NULL)
+	for (cpp = except; *cpp != NULL; ++cpp)
+	  {
+	    size_t len = strlen (*cpp);
+	    if (!strncmp (line + 8, *cpp, len) && isspace (line[8 + len]))
+	      {
+		++okay;
+		break;
+	      }
+	  }
+      if (!okay)
+	{
+	  fputs (line, stdout);
+	  result = 2;
+	}
+    }
+  fclose (input);
+  remove (macrofile);
+
+  return result;
+}
+
+/* EOF */
diff --git a/REORG.TODO/stdlib/jrand48.c b/REORG.TODO/stdlib/jrand48.c
new file mode 100644
index 0000000000..4a551ed1f3
--- /dev/null
+++ b/REORG.TODO/stdlib/jrand48.c
@@ -0,0 +1,30 @@
+/* Copyright (C) 1995-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <stdlib.h>
+
+
+long int
+jrand48 (unsigned short int xsubi[3])
+{
+  long int result;
+
+  (void) __jrand48_r (xsubi, &__libc_drand48_data, &result);
+
+  return result;
+}
diff --git a/REORG.TODO/stdlib/jrand48_r.c b/REORG.TODO/stdlib/jrand48_r.c
new file mode 100644
index 0000000000..40e6a1cb2c
--- /dev/null
+++ b/REORG.TODO/stdlib/jrand48_r.c
@@ -0,0 +1,34 @@
+/* Copyright (C) 1995-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <stdlib.h>
+
+int
+__jrand48_r (unsigned short int xsubi[3], struct drand48_data *buffer,
+	     long int *result)
+{
+  /* Compute next state.  */
+  if (__drand48_iterate (xsubi, buffer) < 0)
+    return -1;
+
+  /* Store the result.  */
+  *result = (int32_t) ((xsubi[2] << 16) | xsubi[1]);
+
+  return 0;
+}
+weak_alias (__jrand48_r, jrand48_r)
diff --git a/REORG.TODO/stdlib/l64a.c b/REORG.TODO/stdlib/l64a.c
new file mode 100644
index 0000000000..fc125844ce
--- /dev/null
+++ b/REORG.TODO/stdlib/l64a.c
@@ -0,0 +1,56 @@
+/* Copyright (C) 1995-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <stdlib.h>
+
+/* Conversion table.  */
+static const char conv_table[64] =
+{
+  '.', '/', '0', '1', '2', '3', '4', '5',
+  '6', '7', '8', '9', 'A', 'B', 'C', 'D',
+  'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L',
+  'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T',
+  'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b',
+  'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j',
+  'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r',
+  's', 't', 'u', 'v', 'w', 'x', 'y', 'z'
+};
+
+char *
+l64a (long int n)
+{
+  unsigned long int m = (unsigned long int) n;
+  static char result[7];
+  int cnt;
+
+  /* The standard says that only 32 bits are used.  */
+  m &= 0xffffffff;
+
+  if (m == 0ul)
+    /* The value for N == 0 is defined to be the empty string. */
+    return (char *) "";
+
+  for (cnt = 0; m > 0ul; ++cnt)
+    {
+      result[cnt] = conv_table[m & 0x3f];
+      m >>= 6;
+    }
+  result[cnt] = '\0';
+
+  return result;
+}
diff --git a/REORG.TODO/stdlib/labs.c b/REORG.TODO/stdlib/labs.c
new file mode 100644
index 0000000000..506c4bb21e
--- /dev/null
+++ b/REORG.TODO/stdlib/labs.c
@@ -0,0 +1,28 @@
+/* Copyright (C) 1991-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <stdlib.h>
+
+#undef	labs
+
+
+/* Return the absolute value of I.  */
+long int
+labs (long int i)
+{
+  return i < 0 ? -i : i;
+}
diff --git a/REORG.TODO/stdlib/lcong48.c b/REORG.TODO/stdlib/lcong48.c
new file mode 100644
index 0000000000..b90ae1c5c2
--- /dev/null
+++ b/REORG.TODO/stdlib/lcong48.c
@@ -0,0 +1,26 @@
+/* Copyright (C) 1995-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <stdlib.h>
+
+
+void
+lcong48 (unsigned short int param[7])
+{
+  (void) __lcong48_r (param, &__libc_drand48_data);
+}
diff --git a/REORG.TODO/stdlib/lcong48_r.c b/REORG.TODO/stdlib/lcong48_r.c
new file mode 100644
index 0000000000..d5228af8f5
--- /dev/null
+++ b/REORG.TODO/stdlib/lcong48_r.c
@@ -0,0 +1,36 @@
+/* Copyright (C) 1995-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <stdint.h>
+#include <stdlib.h>
+#include <string.h>
+#include <limits.h>
+
+int
+__lcong48_r (unsigned short int param[7], struct drand48_data *buffer)
+{
+  /* Store the given values.  */
+  memcpy (buffer->__x, &param[0], sizeof (buffer->__x));
+  buffer->__a = ((uint64_t) param[5] << 32 | (uint32_t) param[4] << 16
+		 | param[3]);
+  buffer->__c = param[6];
+  buffer->__init = 1;
+
+  return 0;
+}
+weak_alias (__lcong48_r, lcong48_r)
diff --git a/REORG.TODO/stdlib/ldbl2mpn.c b/REORG.TODO/stdlib/ldbl2mpn.c
new file mode 100644
index 0000000000..450f9381cc
--- /dev/null
+++ b/REORG.TODO/stdlib/ldbl2mpn.c
@@ -0,0 +1 @@
+/* Empty.  Not needed unless ldbl support is in. */
diff --git a/REORG.TODO/stdlib/ldiv.c b/REORG.TODO/stdlib/ldiv.c
new file mode 100644
index 0000000000..3951eb05f0
--- /dev/null
+++ b/REORG.TODO/stdlib/ldiv.c
@@ -0,0 +1,31 @@
+/* Copyright (C) 1992-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <stdlib.h>
+
+
+/* Return the `ldiv_t' representation of NUMER over DENOM.  */
+ldiv_t
+ldiv (long int numer, long int denom)
+{
+  ldiv_t result;
+
+  result.quot = numer / denom;
+  result.rem = numer % denom;
+
+  return result;
+}
diff --git a/REORG.TODO/stdlib/llabs.c b/REORG.TODO/stdlib/llabs.c
new file mode 100644
index 0000000000..39d0561c0d
--- /dev/null
+++ b/REORG.TODO/stdlib/llabs.c
@@ -0,0 +1,29 @@
+/* `long long int' absolute value.
+   Copyright (C) 1991-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <stdlib.h>
+
+#undef	llabs
+
+
+/* Return the absolute value of I.  */
+long long int
+llabs (long long int i)
+{
+  return i < 0 ? -i : i;
+}
diff --git a/REORG.TODO/stdlib/lldiv.c b/REORG.TODO/stdlib/lldiv.c
new file mode 100644
index 0000000000..7109f35063
--- /dev/null
+++ b/REORG.TODO/stdlib/lldiv.c
@@ -0,0 +1,32 @@
+/* `long long int' divison with remainder.
+   Copyright (C) 1992-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <stdlib.h>
+
+
+/* Return the `lldiv_t' representation of NUMER over DENOM.  */
+lldiv_t
+lldiv (long long int numer, long long int denom)
+{
+  lldiv_t result;
+
+  result.quot = numer / denom;
+  result.rem = numer % denom;
+
+  return result;
+}
diff --git a/REORG.TODO/stdlib/longlong.h b/REORG.TODO/stdlib/longlong.h
new file mode 100644
index 0000000000..0ec11c5056
--- /dev/null
+++ b/REORG.TODO/stdlib/longlong.h
@@ -0,0 +1,1773 @@
+/* longlong.h -- definitions for mixed size 32/64 bit arithmetic.
+   Copyright (C) 1991-2017 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   In addition to the permissions in the GNU Lesser General Public
+   License, the Free Software Foundation gives you unlimited
+   permission to link the compiled version of this file into
+   combinations with other programs, and to distribute those
+   combinations without any restriction coming from the use of this
+   file.  (The Lesser General Public License restrictions do apply in
+   other respects; for example, they cover modification of the file,
+   and distribution when not linked into a combine executable.)
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* You have to define the following before including this file:
+
+   UWtype -- An unsigned type, default type for operations (typically a "word")
+   UHWtype -- An unsigned type, at least half the size of UWtype.
+   UDWtype -- An unsigned type, at least twice as large a UWtype
+   W_TYPE_SIZE -- size in bits of UWtype
+
+   UQItype -- Unsigned 8 bit type.
+   SItype, USItype -- Signed and unsigned 32 bit types.
+   DItype, UDItype -- Signed and unsigned 64 bit types.
+
+   On a 32 bit machine UWtype should typically be USItype;
+   on a 64 bit machine, UWtype should typically be UDItype.  */
+
+#define __BITS4 (W_TYPE_SIZE / 4)
+#define __ll_B ((UWtype) 1 << (W_TYPE_SIZE / 2))
+#define __ll_lowpart(t) ((UWtype) (t) & (__ll_B - 1))
+#define __ll_highpart(t) ((UWtype) (t) >> (W_TYPE_SIZE / 2))
+
+#ifndef W_TYPE_SIZE
+#define W_TYPE_SIZE	32
+#define UWtype		USItype
+#define UHWtype		USItype
+#define UDWtype		UDItype
+#endif
+
+/* Used in glibc only.  */
+#ifndef attribute_hidden
+#define attribute_hidden
+#endif
+
+extern const UQItype __clz_tab[256] attribute_hidden;
+
+/* Define auxiliary asm macros.
+
+   1) umul_ppmm(high_prod, low_prod, multiplier, multiplicand) multiplies two
+   UWtype integers MULTIPLIER and MULTIPLICAND, and generates a two UWtype
+   word product in HIGH_PROD and LOW_PROD.
+
+   2) __umulsidi3(a,b) multiplies two UWtype integers A and B, and returns a
+   UDWtype product.  This is just a variant of umul_ppmm.
+
+   3) udiv_qrnnd(quotient, remainder, high_numerator, low_numerator,
+   denominator) divides a UDWtype, composed by the UWtype integers
+   HIGH_NUMERATOR and LOW_NUMERATOR, by DENOMINATOR and places the quotient
+   in QUOTIENT and the remainder in REMAINDER.  HIGH_NUMERATOR must be less
+   than DENOMINATOR for correct operation.  If, in addition, the most
+   significant bit of DENOMINATOR must be 1, then the pre-processor symbol
+   UDIV_NEEDS_NORMALIZATION is defined to 1.
+
+   4) sdiv_qrnnd(quotient, remainder, high_numerator, low_numerator,
+   denominator).  Like udiv_qrnnd but the numbers are signed.  The quotient
+   is rounded towards 0.
+
+   5) count_leading_zeros(count, x) counts the number of zero-bits from the
+   msb to the first nonzero bit in the UWtype X.  This is the number of
+   steps X needs to be shifted left to set the msb.  Undefined for X == 0,
+   unless the symbol COUNT_LEADING_ZEROS_0 is defined to some value.
+
+   6) count_trailing_zeros(count, x) like count_leading_zeros, but counts
+   from the least significant end.
+
+   7) add_ssaaaa(high_sum, low_sum, high_addend_1, low_addend_1,
+   high_addend_2, low_addend_2) adds two UWtype integers, composed by
+   HIGH_ADDEND_1 and LOW_ADDEND_1, and HIGH_ADDEND_2 and LOW_ADDEND_2
+   respectively.  The result is placed in HIGH_SUM and LOW_SUM.  Overflow
+   (i.e. carry out) is not stored anywhere, and is lost.
+
+   8) sub_ddmmss(high_difference, low_difference, high_minuend, low_minuend,
+   high_subtrahend, low_subtrahend) subtracts two two-word UWtype integers,
+   composed by HIGH_MINUEND_1 and LOW_MINUEND_1, and HIGH_SUBTRAHEND_2 and
+   LOW_SUBTRAHEND_2 respectively.  The result is placed in HIGH_DIFFERENCE
+   and LOW_DIFFERENCE.  Overflow (i.e. carry out) is not stored anywhere,
+   and is lost.
+
+   If any of these macros are left undefined for a particular CPU,
+   C macros are used.  */
+
+/* The CPUs come in alphabetical order below.
+
+   Please add support for more CPUs here, or improve the current support
+   for the CPUs below!
+   (E.g. WE32100, IBM360.)  */
+
+#if defined (__GNUC__) && !defined (NO_ASM)
+
+/* We sometimes need to clobber "cc" with gcc2, but that would not be
+   understood by gcc1.  Use cpp to avoid major code duplication.  */
+#if __GNUC__ < 2
+#define __CLOBBER_CC
+#define __AND_CLOBBER_CC
+#else /* __GNUC__ >= 2 */
+#define __CLOBBER_CC : "cc"
+#define __AND_CLOBBER_CC , "cc"
+#endif /* __GNUC__ < 2 */
+
+#if defined (__aarch64__)
+
+#if W_TYPE_SIZE == 32
+#define count_leading_zeros(COUNT, X)	((COUNT) = __builtin_clz (X))
+#define count_trailing_zeros(COUNT, X)   ((COUNT) = __builtin_ctz (X))
+#define COUNT_LEADING_ZEROS_0 32
+#endif /* W_TYPE_SIZE == 32 */
+
+#if W_TYPE_SIZE == 64
+#define count_leading_zeros(COUNT, X)	((COUNT) = __builtin_clzll (X))
+#define count_trailing_zeros(COUNT, X)   ((COUNT) = __builtin_ctzll (X))
+#define COUNT_LEADING_ZEROS_0 64
+#endif /* W_TYPE_SIZE == 64 */
+
+#endif /* __aarch64__ */
+
+#if defined (__alpha) && W_TYPE_SIZE == 64
+/* There is a bug in g++ before version 5 that
+   errors on __builtin_alpha_umulh.  */
+#if !defined(__cplusplus) || __GNUC__ >= 5
+#define umul_ppmm(ph, pl, m0, m1) \
+  do {									\
+    UDItype __m0 = (m0), __m1 = (m1);					\
+    (ph) = __builtin_alpha_umulh (__m0, __m1);				\
+    (pl) = __m0 * __m1;							\
+  } while (0)
+#define UMUL_TIME 46
+#endif /* !c++ */
+#ifndef LONGLONG_STANDALONE
+#define udiv_qrnnd(q, r, n1, n0, d) \
+  do { UDItype __r;							\
+    (q) = __udiv_qrnnd (&__r, (n1), (n0), (d));				\
+    (r) = __r;								\
+  } while (0)
+extern UDItype __udiv_qrnnd (UDItype *, UDItype, UDItype, UDItype);
+#define UDIV_TIME 220
+#endif /* LONGLONG_STANDALONE */
+#ifdef __alpha_cix__
+#define count_leading_zeros(COUNT,X)	((COUNT) = __builtin_clzl (X))
+#define count_trailing_zeros(COUNT,X)	((COUNT) = __builtin_ctzl (X))
+#define COUNT_LEADING_ZEROS_0 64
+#else
+#define count_leading_zeros(COUNT,X) \
+  do {									\
+    UDItype __xr = (X), __t, __a;					\
+    __t = __builtin_alpha_cmpbge (0, __xr);				\
+    __a = __clz_tab[__t ^ 0xff] - 1;					\
+    __t = __builtin_alpha_extbl (__xr, __a);				\
+    (COUNT) = 64 - (__clz_tab[__t] + __a*8);				\
+  } while (0)
+#define count_trailing_zeros(COUNT,X) \
+  do {									\
+    UDItype __xr = (X), __t, __a;					\
+    __t = __builtin_alpha_cmpbge (0, __xr);				\
+    __t = ~__t & -~__t;							\
+    __a = ((__t & 0xCC) != 0) * 2;					\
+    __a += ((__t & 0xF0) != 0) * 4;					\
+    __a += ((__t & 0xAA) != 0);						\
+    __t = __builtin_alpha_extbl (__xr, __a);				\
+    __a <<= 3;								\
+    __t &= -__t;							\
+    __a += ((__t & 0xCC) != 0) * 2;					\
+    __a += ((__t & 0xF0) != 0) * 4;					\
+    __a += ((__t & 0xAA) != 0);						\
+    (COUNT) = __a;							\
+  } while (0)
+#endif /* __alpha_cix__ */
+#endif /* __alpha */
+
+#if defined (__arc__) && W_TYPE_SIZE == 32
+#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
+  __asm__ ("add.f	%1, %4, %5\n\tadc	%0, %2, %3"		\
+	   : "=r" ((USItype) (sh)),					\
+	     "=&r" ((USItype) (sl))					\
+	   : "%r" ((USItype) (ah)),					\
+	     "rIJ" ((USItype) (bh)),					\
+	     "%r" ((USItype) (al)),					\
+	     "rIJ" ((USItype) (bl)))
+#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
+  __asm__ ("sub.f	%1, %4, %5\n\tsbc	%0, %2, %3"		\
+	   : "=r" ((USItype) (sh)),					\
+	     "=&r" ((USItype) (sl))					\
+	   : "r" ((USItype) (ah)),					\
+	     "rIJ" ((USItype) (bh)),					\
+	     "r" ((USItype) (al)),					\
+	     "rIJ" ((USItype) (bl)))
+
+#define __umulsidi3(u,v) ((UDItype)(USItype)u*(USItype)v)
+#ifdef __ARC_NORM__
+#define count_leading_zeros(count, x) \
+  do									\
+    {									\
+      SItype c_;							\
+									\
+      __asm__ ("norm.f\t%0,%1\n\tmov.mi\t%0,-1" : "=r" (c_) : "r" (x) : "cc");\
+      (count) = c_ + 1;							\
+    }									\
+  while (0)
+#define COUNT_LEADING_ZEROS_0 32
+#endif
+#endif
+
+#if defined (__arm__) && (defined (__thumb2__) || !defined (__thumb__)) \
+ && W_TYPE_SIZE == 32
+#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
+  __asm__ ("adds	%1, %4, %5\n\tadc	%0, %2, %3"		\
+	   : "=r" ((USItype) (sh)),					\
+	     "=&r" ((USItype) (sl))					\
+	   : "%r" ((USItype) (ah)),					\
+	     "rI" ((USItype) (bh)),					\
+	     "%r" ((USItype) (al)),					\
+	     "rI" ((USItype) (bl)) __CLOBBER_CC)
+#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
+  __asm__ ("subs	%1, %4, %5\n\tsbc	%0, %2, %3"		\
+	   : "=r" ((USItype) (sh)),					\
+	     "=&r" ((USItype) (sl))					\
+	   : "r" ((USItype) (ah)),					\
+	     "rI" ((USItype) (bh)),					\
+	     "r" ((USItype) (al)),					\
+	     "rI" ((USItype) (bl)) __CLOBBER_CC)
+# if defined(__ARM_ARCH_2__) || defined(__ARM_ARCH_2A__) \
+     || defined(__ARM_ARCH_3__)
+#  define umul_ppmm(xh, xl, a, b)					\
+  do {									\
+    register USItype __t0, __t1, __t2;					\
+    __asm__ ("%@ Inlined umul_ppmm\n"					\
+	   "	mov	%2, %5, lsr #16\n"				\
+	   "	mov	%0, %6, lsr #16\n"				\
+	   "	bic	%3, %5, %2, lsl #16\n"				\
+	   "	bic	%4, %6, %0, lsl #16\n"				\
+	   "	mul	%1, %3, %4\n"					\
+	   "	mul	%4, %2, %4\n"					\
+	   "	mul	%3, %0, %3\n"					\
+	   "	mul	%0, %2, %0\n"					\
+	   "	adds	%3, %4, %3\n"					\
+	   "	addcs	%0, %0, #65536\n"				\
+	   "	adds	%1, %1, %3, lsl #16\n"				\
+	   "	adc	%0, %0, %3, lsr #16"				\
+	   : "=&r" ((USItype) (xh)),					\
+	     "=r" ((USItype) (xl)),					\
+	     "=&r" (__t0), "=&r" (__t1), "=r" (__t2)			\
+	   : "r" ((USItype) (a)),					\
+	     "r" ((USItype) (b)) __CLOBBER_CC );			\
+  } while (0)
+#  define UMUL_TIME 20
+# else
+#  define umul_ppmm(xh, xl, a, b)					\
+  do {									\
+    /* Generate umull, under compiler control.  */			\
+    register UDItype __t0 = (UDItype)(USItype)(a) * (USItype)(b);	\
+    (xl) = (USItype)__t0;						\
+    (xh) = (USItype)(__t0 >> 32);					\
+  } while (0)
+#  define UMUL_TIME 3
+# endif
+# define UDIV_TIME 100
+#endif /* __arm__ */
+
+#if defined(__arm__)
+/* Let gcc decide how best to implement count_leading_zeros.  */
+#define count_leading_zeros(COUNT,X)	((COUNT) = __builtin_clz (X))
+#define count_trailing_zeros(COUNT,X)   ((COUNT) = __builtin_ctz (X))
+#define COUNT_LEADING_ZEROS_0 32
+#endif
+
+#if defined (__AVR__)
+
+#if W_TYPE_SIZE == 16
+#define count_leading_zeros(COUNT,X)  ((COUNT) = __builtin_clz (X))
+#define count_trailing_zeros(COUNT,X) ((COUNT) = __builtin_ctz (X))
+#define COUNT_LEADING_ZEROS_0 16
+#endif /* W_TYPE_SIZE == 16 */
+
+#if W_TYPE_SIZE == 32
+#define count_leading_zeros(COUNT,X)  ((COUNT) = __builtin_clzl (X))
+#define count_trailing_zeros(COUNT,X) ((COUNT) = __builtin_ctzl (X))
+#define COUNT_LEADING_ZEROS_0 32
+#endif /* W_TYPE_SIZE == 32 */
+
+#if W_TYPE_SIZE == 64
+#define count_leading_zeros(COUNT,X)  ((COUNT) = __builtin_clzll (X))
+#define count_trailing_zeros(COUNT,X) ((COUNT) = __builtin_ctzll (X))
+#define COUNT_LEADING_ZEROS_0 64
+#endif /* W_TYPE_SIZE == 64 */
+
+#endif /* defined (__AVR__) */
+
+#if defined (__CRIS__)
+
+#if __CRIS_arch_version >= 3
+#define count_leading_zeros(COUNT, X) ((COUNT) = __builtin_clz (X))
+#define COUNT_LEADING_ZEROS_0 32
+#endif /* __CRIS_arch_version >= 3 */
+
+#if __CRIS_arch_version >= 8
+#define count_trailing_zeros(COUNT, X) ((COUNT) = __builtin_ctz (X))
+#endif /* __CRIS_arch_version >= 8 */
+
+#if __CRIS_arch_version >= 10
+#define __umulsidi3(u,v) ((UDItype)(USItype) (u) * (UDItype)(USItype) (v))
+#else
+#define __umulsidi3 __umulsidi3
+extern UDItype __umulsidi3 (USItype, USItype);
+#endif /* __CRIS_arch_version >= 10 */
+
+#define umul_ppmm(w1, w0, u, v)		\
+  do {					\
+    UDItype __x = __umulsidi3 (u, v);	\
+    (w0) = (USItype) (__x);		\
+    (w1) = (USItype) (__x >> 32);	\
+  } while (0)
+
+/* FIXME: defining add_ssaaaa and sub_ddmmss should be advantageous for
+   DFmode ("double" intrinsics, avoiding two of the three insns handling
+   carry), but defining them as open-code C composing and doing the
+   operation in DImode (UDImode) shows that the DImode needs work:
+   register pressure from requiring neighboring registers and the
+   traffic to and from them come to dominate, in the 4.7 series.  */
+
+#endif /* defined (__CRIS__) */
+
+#if defined (__hppa) && W_TYPE_SIZE == 32
+#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
+  __asm__ ("add %4,%5,%1\n\taddc %2,%3,%0"				\
+	   : "=r" ((USItype) (sh)),					\
+	     "=&r" ((USItype) (sl))					\
+	   : "%rM" ((USItype) (ah)),					\
+	     "rM" ((USItype) (bh)),					\
+	     "%rM" ((USItype) (al)),					\
+	     "rM" ((USItype) (bl)))
+#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
+  __asm__ ("sub %4,%5,%1\n\tsubb %2,%3,%0"				\
+	   : "=r" ((USItype) (sh)),					\
+	     "=&r" ((USItype) (sl))					\
+	   : "rM" ((USItype) (ah)),					\
+	     "rM" ((USItype) (bh)),					\
+	     "rM" ((USItype) (al)),					\
+	     "rM" ((USItype) (bl)))
+#if defined (_PA_RISC1_1)
+#define umul_ppmm(w1, w0, u, v) \
+  do {									\
+    union								\
+      {									\
+	UDItype __f;							\
+	struct {USItype __w1, __w0;} __w1w0;				\
+      } __t;								\
+    __asm__ ("xmpyu %1,%2,%0"						\
+	     : "=x" (__t.__f)						\
+	     : "x" ((USItype) (u)),					\
+	       "x" ((USItype) (v)));					\
+    (w1) = __t.__w1w0.__w1;						\
+    (w0) = __t.__w1w0.__w0;						\
+     } while (0)
+#define UMUL_TIME 8
+#else
+#define UMUL_TIME 30
+#endif
+#define UDIV_TIME 40
+#define count_leading_zeros(count, x) \
+  do {									\
+    USItype __tmp;							\
+    __asm__ (								\
+       "ldi		1,%0\n"						\
+"	extru,=		%1,15,16,%%r0		; Bits 31..16 zero?\n"	\
+"	extru,tr	%1,15,16,%1		; No.  Shift down, skip add.\n"\
+"	ldo		16(%0),%0		; Yes.  Perform add.\n"	\
+"	extru,=		%1,23,8,%%r0		; Bits 15..8 zero?\n"	\
+"	extru,tr	%1,23,8,%1		; No.  Shift down, skip add.\n"\
+"	ldo		8(%0),%0		; Yes.  Perform add.\n"	\
+"	extru,=		%1,27,4,%%r0		; Bits 7..4 zero?\n"	\
+"	extru,tr	%1,27,4,%1		; No.  Shift down, skip add.\n"\
+"	ldo		4(%0),%0		; Yes.  Perform add.\n"	\
+"	extru,=		%1,29,2,%%r0		; Bits 3..2 zero?\n"	\
+"	extru,tr	%1,29,2,%1		; No.  Shift down, skip add.\n"\
+"	ldo		2(%0),%0		; Yes.  Perform add.\n"	\
+"	extru		%1,30,1,%1		; Extract bit 1.\n"	\
+"	sub		%0,%1,%0		; Subtract it.\n"	\
+	: "=r" (count), "=r" (__tmp) : "1" (x));			\
+  } while (0)
+#endif
+
+#if (defined (__i370__) || defined (__s390__) || defined (__mvs__)) && W_TYPE_SIZE == 32
+#if !defined (__zarch__)
+#define smul_ppmm(xh, xl, m0, m1) \
+  do {									\
+    union {DItype __ll;							\
+	   struct {USItype __h, __l;} __i;				\
+	  } __x;							\
+    __asm__ ("lr %N0,%1\n\tmr %0,%2"					\
+	     : "=&r" (__x.__ll)						\
+	     : "r" (m0), "r" (m1));					\
+    (xh) = __x.__i.__h; (xl) = __x.__i.__l;				\
+  } while (0)
+#define sdiv_qrnnd(q, r, n1, n0, d) \
+  do {									\
+    union {DItype __ll;							\
+	   struct {USItype __h, __l;} __i;				\
+	  } __x;							\
+    __x.__i.__h = n1; __x.__i.__l = n0;					\
+    __asm__ ("dr %0,%2"							\
+	     : "=r" (__x.__ll)						\
+	     : "0" (__x.__ll), "r" (d));				\
+    (q) = __x.__i.__l; (r) = __x.__i.__h;				\
+  } while (0)
+#else
+#define smul_ppmm(xh, xl, m0, m1) \
+  do {                                                                  \
+    register SItype __r0 __asm__ ("0");					\
+    register SItype __r1 __asm__ ("1") = (m0);				\
+									\
+    __asm__ ("mr\t%%r0,%3"                                              \
+	     : "=r" (__r0), "=r" (__r1)					\
+	     : "r"  (__r1),  "r" (m1));					\
+    (xh) = __r0; (xl) = __r1;						\
+  } while (0)
+
+#define sdiv_qrnnd(q, r, n1, n0, d) \
+  do {									\
+    register SItype __r0 __asm__ ("0") = (n1);				\
+    register SItype __r1 __asm__ ("1") = (n0);				\
+									\
+    __asm__ ("dr\t%%r0,%4"                                              \
+	     : "=r" (__r0), "=r" (__r1)					\
+	     : "r" (__r0), "r" (__r1), "r" (d));			\
+    (q) = __r1; (r) = __r0;						\
+  } while (0)
+#endif /* __zarch__ */
+#endif
+
+#if (defined (__i386__) || defined (__i486__)) && W_TYPE_SIZE == 32
+#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
+  __asm__ ("add{l} {%5,%1|%1,%5}\n\tadc{l} {%3,%0|%0,%3}"		\
+	   : "=r" ((USItype) (sh)),					\
+	     "=&r" ((USItype) (sl))					\
+	   : "%0" ((USItype) (ah)),					\
+	     "g" ((USItype) (bh)),					\
+	     "%1" ((USItype) (al)),					\
+	     "g" ((USItype) (bl)))
+#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
+  __asm__ ("sub{l} {%5,%1|%1,%5}\n\tsbb{l} {%3,%0|%0,%3}"		\
+	   : "=r" ((USItype) (sh)),					\
+	     "=&r" ((USItype) (sl))					\
+	   : "0" ((USItype) (ah)),					\
+	     "g" ((USItype) (bh)),					\
+	     "1" ((USItype) (al)),					\
+	     "g" ((USItype) (bl)))
+#define umul_ppmm(w1, w0, u, v) \
+  __asm__ ("mul{l} %3"							\
+	   : "=a" ((USItype) (w0)),					\
+	     "=d" ((USItype) (w1))					\
+	   : "%0" ((USItype) (u)),					\
+	     "rm" ((USItype) (v)))
+#define udiv_qrnnd(q, r, n1, n0, dv) \
+  __asm__ ("div{l} %4"							\
+	   : "=a" ((USItype) (q)),					\
+	     "=d" ((USItype) (r))					\
+	   : "0" ((USItype) (n0)),					\
+	     "1" ((USItype) (n1)),					\
+	     "rm" ((USItype) (dv)))
+#define count_leading_zeros(count, x)	((count) = __builtin_clz (x))
+#define count_trailing_zeros(count, x)	((count) = __builtin_ctz (x))
+#define UMUL_TIME 40
+#define UDIV_TIME 40
+#endif /* 80x86 */
+
+#if defined (__x86_64__) && W_TYPE_SIZE == 64
+#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
+  __asm__ ("add{q} {%5,%1|%1,%5}\n\tadc{q} {%3,%0|%0,%3}"		\
+	   : "=r" ((UDItype) (sh)),					\
+	     "=&r" ((UDItype) (sl))					\
+	   : "%0" ((UDItype) (ah)),					\
+	     "rme" ((UDItype) (bh)),					\
+	     "%1" ((UDItype) (al)),					\
+	     "rme" ((UDItype) (bl)))
+#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
+  __asm__ ("sub{q} {%5,%1|%1,%5}\n\tsbb{q} {%3,%0|%0,%3}"		\
+	   : "=r" ((UDItype) (sh)),					\
+	     "=&r" ((UDItype) (sl))					\
+	   : "0" ((UDItype) (ah)),					\
+	     "rme" ((UDItype) (bh)),					\
+	     "1" ((UDItype) (al)),					\
+	     "rme" ((UDItype) (bl)))
+#define umul_ppmm(w1, w0, u, v) \
+  __asm__ ("mul{q} %3"							\
+	   : "=a" ((UDItype) (w0)),					\
+	     "=d" ((UDItype) (w1))					\
+	   : "%0" ((UDItype) (u)),					\
+	     "rm" ((UDItype) (v)))
+#define udiv_qrnnd(q, r, n1, n0, dv) \
+  __asm__ ("div{q} %4"							\
+	   : "=a" ((UDItype) (q)),					\
+	     "=d" ((UDItype) (r))					\
+	   : "0" ((UDItype) (n0)),					\
+	     "1" ((UDItype) (n1)),					\
+	     "rm" ((UDItype) (dv)))
+#define count_leading_zeros(count, x)	((count) = __builtin_clzll (x))
+#define count_trailing_zeros(count, x)	((count) = __builtin_ctzll (x))
+#define UMUL_TIME 40
+#define UDIV_TIME 40
+#endif /* x86_64 */
+
+#if defined (__i960__) && W_TYPE_SIZE == 32
+#define umul_ppmm(w1, w0, u, v) \
+  ({union {UDItype __ll;						\
+	   struct {USItype __l, __h;} __i;				\
+	  } __xx;							\
+  __asm__ ("emul	%2,%1,%0"					\
+	   : "=d" (__xx.__ll)						\
+	   : "%dI" ((USItype) (u)),					\
+	     "dI" ((USItype) (v)));					\
+  (w1) = __xx.__i.__h; (w0) = __xx.__i.__l;})
+#define __umulsidi3(u, v) \
+  ({UDItype __w;							\
+    __asm__ ("emul	%2,%1,%0"					\
+	     : "=d" (__w)						\
+	     : "%dI" ((USItype) (u)),					\
+	       "dI" ((USItype) (v)));					\
+    __w; })
+#endif /* __i960__ */
+
+#if defined (__ia64) && W_TYPE_SIZE == 64
+/* This form encourages gcc (pre-release 3.4 at least) to emit predicated
+   "sub r=r,r" and "sub r=r,r,1", giving a 2 cycle latency.  The generic
+   code using "al<bl" arithmetically comes out making an actual 0 or 1 in a
+   register, which takes an extra cycle.  */
+#define sub_ddmmss(sh, sl, ah, al, bh, bl)				\
+  do {									\
+    UWtype __x;								\
+    __x = (al) - (bl);							\
+    if ((al) < (bl))							\
+      (sh) = (ah) - (bh) - 1;						\
+    else								\
+      (sh) = (ah) - (bh);						\
+    (sl) = __x;								\
+  } while (0)
+
+/* Do both product parts in assembly, since that gives better code with
+   all gcc versions.  Some callers will just use the upper part, and in
+   that situation we waste an instruction, but not any cycles.  */
+#define umul_ppmm(ph, pl, m0, m1)					\
+  __asm__ ("xma.hu %0 = %2, %3, f0\n\txma.l %1 = %2, %3, f0"		\
+	   : "=&f" (ph), "=f" (pl)					\
+	   : "f" (m0), "f" (m1))
+#define count_leading_zeros(count, x)					\
+  do {									\
+    UWtype _x = (x), _y, _a, _c;					\
+    __asm__ ("mux1 %0 = %1, @rev" : "=r" (_y) : "r" (_x));		\
+    __asm__ ("czx1.l %0 = %1" : "=r" (_a) : "r" (-_y | _y));		\
+    _c = (_a - 1) << 3;							\
+    _x >>= _c;								\
+    if (_x >= 1 << 4)							\
+      _x >>= 4, _c += 4;						\
+    if (_x >= 1 << 2)							\
+      _x >>= 2, _c += 2;						\
+    _c += _x >> 1;							\
+    (count) =  W_TYPE_SIZE - 1 - _c;					\
+  } while (0)
+/* similar to what gcc does for __builtin_ffs, but 0 based rather than 1
+   based, and we don't need a special case for x==0 here */
+#define count_trailing_zeros(count, x)					\
+  do {									\
+    UWtype __ctz_x = (x);						\
+    __asm__ ("popcnt %0 = %1"						\
+	     : "=r" (count)						\
+	     : "r" ((__ctz_x-1) & ~__ctz_x));				\
+  } while (0)
+#define UMUL_TIME 14
+#endif
+
+#if defined (__M32R__) && W_TYPE_SIZE == 32
+#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
+  /* The cmp clears the condition bit.  */ \
+  __asm__ ("cmp %0,%0\n\taddx %1,%5\n\taddx %0,%3"			\
+	   : "=r" ((USItype) (sh)),					\
+	     "=&r" ((USItype) (sl))					\
+	   : "0" ((USItype) (ah)),					\
+	     "r" ((USItype) (bh)),					\
+	     "1" ((USItype) (al)),					\
+	     "r" ((USItype) (bl))					\
+	   : "cbit")
+#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
+  /* The cmp clears the condition bit.  */ \
+  __asm__ ("cmp %0,%0\n\tsubx %1,%5\n\tsubx %0,%3"			\
+	   : "=r" ((USItype) (sh)),					\
+	     "=&r" ((USItype) (sl))					\
+	   : "0" ((USItype) (ah)),					\
+	     "r" ((USItype) (bh)),					\
+	     "1" ((USItype) (al)),					\
+	     "r" ((USItype) (bl))					\
+	   : "cbit")
+#endif /* __M32R__ */
+
+#if defined (__mc68000__) && W_TYPE_SIZE == 32
+#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
+  __asm__ ("add%.l %5,%1\n\taddx%.l %3,%0"				\
+	   : "=d" ((USItype) (sh)),					\
+	     "=&d" ((USItype) (sl))					\
+	   : "%0" ((USItype) (ah)),					\
+	     "d" ((USItype) (bh)),					\
+	     "%1" ((USItype) (al)),					\
+	     "g" ((USItype) (bl)))
+#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
+  __asm__ ("sub%.l %5,%1\n\tsubx%.l %3,%0"				\
+	   : "=d" ((USItype) (sh)),					\
+	     "=&d" ((USItype) (sl))					\
+	   : "0" ((USItype) (ah)),					\
+	     "d" ((USItype) (bh)),					\
+	     "1" ((USItype) (al)),					\
+	     "g" ((USItype) (bl)))
+
+/* The '020, '030, '040, '060 and CPU32 have 32x32->64 and 64/32->32q-32r.  */
+#if (defined (__mc68020__) && !defined (__mc68060__))
+#define umul_ppmm(w1, w0, u, v) \
+  __asm__ ("mulu%.l %3,%1:%0"						\
+	   : "=d" ((USItype) (w0)),					\
+	     "=d" ((USItype) (w1))					\
+	   : "%0" ((USItype) (u)),					\
+	     "dmi" ((USItype) (v)))
+#define UMUL_TIME 45
+#define udiv_qrnnd(q, r, n1, n0, d) \
+  __asm__ ("divu%.l %4,%1:%0"						\
+	   : "=d" ((USItype) (q)),					\
+	     "=d" ((USItype) (r))					\
+	   : "0" ((USItype) (n0)),					\
+	     "1" ((USItype) (n1)),					\
+	     "dmi" ((USItype) (d)))
+#define UDIV_TIME 90
+#define sdiv_qrnnd(q, r, n1, n0, d) \
+  __asm__ ("divs%.l %4,%1:%0"						\
+	   : "=d" ((USItype) (q)),					\
+	     "=d" ((USItype) (r))					\
+	   : "0" ((USItype) (n0)),					\
+	     "1" ((USItype) (n1)),					\
+	     "dmi" ((USItype) (d)))
+
+#elif defined (__mcoldfire__) /* not mc68020 */
+
+#define umul_ppmm(xh, xl, a, b) \
+  __asm__ ("| Inlined umul_ppmm\n"					\
+	   "	move%.l	%2,%/d0\n"					\
+	   "	move%.l	%3,%/d1\n"					\
+	   "	move%.l	%/d0,%/d2\n"					\
+	   "	swap	%/d0\n"						\
+	   "	move%.l	%/d1,%/d3\n"					\
+	   "	swap	%/d1\n"						\
+	   "	move%.w	%/d2,%/d4\n"					\
+	   "	mulu	%/d3,%/d4\n"					\
+	   "	mulu	%/d1,%/d2\n"					\
+	   "	mulu	%/d0,%/d3\n"					\
+	   "	mulu	%/d0,%/d1\n"					\
+	   "	move%.l	%/d4,%/d0\n"					\
+	   "	clr%.w	%/d0\n"						\
+	   "	swap	%/d0\n"						\
+	   "	add%.l	%/d0,%/d2\n"					\
+	   "	add%.l	%/d3,%/d2\n"					\
+	   "	jcc	1f\n"						\
+	   "	add%.l	%#65536,%/d1\n"					\
+	   "1:	swap	%/d2\n"						\
+	   "	moveq	%#0,%/d0\n"					\
+	   "	move%.w	%/d2,%/d0\n"					\
+	   "	move%.w	%/d4,%/d2\n"					\
+	   "	move%.l	%/d2,%1\n"					\
+	   "	add%.l	%/d1,%/d0\n"					\
+	   "	move%.l	%/d0,%0"					\
+	   : "=g" ((USItype) (xh)),					\
+	     "=g" ((USItype) (xl))					\
+	   : "g" ((USItype) (a)),					\
+	     "g" ((USItype) (b))					\
+	   : "d0", "d1", "d2", "d3", "d4")
+#define UMUL_TIME 100
+#define UDIV_TIME 400
+#else /* not ColdFire */
+/* %/ inserts REGISTER_PREFIX, %# inserts IMMEDIATE_PREFIX.  */
+#define umul_ppmm(xh, xl, a, b) \
+  __asm__ ("| Inlined umul_ppmm\n"					\
+	   "	move%.l	%2,%/d0\n"					\
+	   "	move%.l	%3,%/d1\n"					\
+	   "	move%.l	%/d0,%/d2\n"					\
+	   "	swap	%/d0\n"						\
+	   "	move%.l	%/d1,%/d3\n"					\
+	   "	swap	%/d1\n"						\
+	   "	move%.w	%/d2,%/d4\n"					\
+	   "	mulu	%/d3,%/d4\n"					\
+	   "	mulu	%/d1,%/d2\n"					\
+	   "	mulu	%/d0,%/d3\n"					\
+	   "	mulu	%/d0,%/d1\n"					\
+	   "	move%.l	%/d4,%/d0\n"					\
+	   "	eor%.w	%/d0,%/d0\n"					\
+	   "	swap	%/d0\n"						\
+	   "	add%.l	%/d0,%/d2\n"					\
+	   "	add%.l	%/d3,%/d2\n"					\
+	   "	jcc	1f\n"						\
+	   "	add%.l	%#65536,%/d1\n"					\
+	   "1:	swap	%/d2\n"						\
+	   "	moveq	%#0,%/d0\n"					\
+	   "	move%.w	%/d2,%/d0\n"					\
+	   "	move%.w	%/d4,%/d2\n"					\
+	   "	move%.l	%/d2,%1\n"					\
+	   "	add%.l	%/d1,%/d0\n"					\
+	   "	move%.l	%/d0,%0"					\
+	   : "=g" ((USItype) (xh)),					\
+	     "=g" ((USItype) (xl))					\
+	   : "g" ((USItype) (a)),					\
+	     "g" ((USItype) (b))					\
+	   : "d0", "d1", "d2", "d3", "d4")
+#define UMUL_TIME 100
+#define UDIV_TIME 400
+
+#endif /* not mc68020 */
+
+/* The '020, '030, '040 and '060 have bitfield insns.
+   cpu32 disguises as a 68020, but lacks them.  */
+#if defined (__mc68020__) && !defined (__mcpu32__)
+#define count_leading_zeros(count, x) \
+  __asm__ ("bfffo %1{%b2:%b2},%0"					\
+	   : "=d" ((USItype) (count))					\
+	   : "od" ((USItype) (x)), "n" (0))
+/* Some ColdFire architectures have a ff1 instruction supported via
+   __builtin_clz. */
+#elif defined (__mcfisaaplus__) || defined (__mcfisac__)
+#define count_leading_zeros(count,x) ((count) = __builtin_clz (x))
+#define COUNT_LEADING_ZEROS_0 32
+#endif
+#endif /* mc68000 */
+
+#if defined (__m88000__) && W_TYPE_SIZE == 32
+#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
+  __asm__ ("addu.co %1,%r4,%r5\n\taddu.ci %0,%r2,%r3"			\
+	   : "=r" ((USItype) (sh)),					\
+	     "=&r" ((USItype) (sl))					\
+	   : "%rJ" ((USItype) (ah)),					\
+	     "rJ" ((USItype) (bh)),					\
+	     "%rJ" ((USItype) (al)),					\
+	     "rJ" ((USItype) (bl)))
+#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
+  __asm__ ("subu.co %1,%r4,%r5\n\tsubu.ci %0,%r2,%r3"			\
+	   : "=r" ((USItype) (sh)),					\
+	     "=&r" ((USItype) (sl))					\
+	   : "rJ" ((USItype) (ah)),					\
+	     "rJ" ((USItype) (bh)),					\
+	     "rJ" ((USItype) (al)),					\
+	     "rJ" ((USItype) (bl)))
+#define count_leading_zeros(count, x) \
+  do {									\
+    USItype __cbtmp;							\
+    __asm__ ("ff1 %0,%1"						\
+	     : "=r" (__cbtmp)						\
+	     : "r" ((USItype) (x)));					\
+    (count) = __cbtmp ^ 31;						\
+  } while (0)
+#define COUNT_LEADING_ZEROS_0 63 /* sic */
+#if defined (__mc88110__)
+#define umul_ppmm(wh, wl, u, v) \
+  do {									\
+    union {UDItype __ll;						\
+	   struct {USItype __h, __l;} __i;				\
+	  } __xx;							\
+    __asm__ ("mulu.d	%0,%1,%2"					\
+	     : "=r" (__xx.__ll)						\
+	     : "r" ((USItype) (u)),					\
+	       "r" ((USItype) (v)));					\
+    (wh) = __xx.__i.__h;						\
+    (wl) = __xx.__i.__l;						\
+  } while (0)
+#define udiv_qrnnd(q, r, n1, n0, d) \
+  ({union {UDItype __ll;						\
+	   struct {USItype __h, __l;} __i;				\
+	  } __xx;							\
+  USItype __q;								\
+  __xx.__i.__h = (n1); __xx.__i.__l = (n0);				\
+  __asm__ ("divu.d %0,%1,%2"						\
+	   : "=r" (__q)							\
+	   : "r" (__xx.__ll),						\
+	     "r" ((USItype) (d)));					\
+  (r) = (n0) - __q * (d); (q) = __q; })
+#define UMUL_TIME 5
+#define UDIV_TIME 25
+#else
+#define UMUL_TIME 17
+#define UDIV_TIME 150
+#endif /* __mc88110__ */
+#endif /* __m88000__ */
+
+#if defined (__mn10300__)
+# if defined (__AM33__)
+#  define count_leading_zeros(COUNT,X)	((COUNT) = __builtin_clz (X))
+#  define umul_ppmm(w1, w0, u, v)		\
+    asm("mulu %3,%2,%1,%0" : "=r"(w0), "=r"(w1) : "r"(u), "r"(v))
+#  define smul_ppmm(w1, w0, u, v)		\
+    asm("mul %3,%2,%1,%0" : "=r"(w0), "=r"(w1) : "r"(u), "r"(v))
+# else
+#  define umul_ppmm(w1, w0, u, v)		\
+    asm("nop; nop; mulu %3,%0" : "=d"(w0), "=z"(w1) : "%0"(u), "d"(v))
+#  define smul_ppmm(w1, w0, u, v)		\
+    asm("nop; nop; mul %3,%0" : "=d"(w0), "=z"(w1) : "%0"(u), "d"(v))
+# endif
+# define add_ssaaaa(sh, sl, ah, al, bh, bl)	\
+  do {						\
+    DWunion __s, __a, __b;			\
+    __a.s.low = (al); __a.s.high = (ah);	\
+    __b.s.low = (bl); __b.s.high = (bh);	\
+    __s.ll = __a.ll + __b.ll;			\
+    (sl) = __s.s.low; (sh) = __s.s.high;	\
+  } while (0)
+# define sub_ddmmss(sh, sl, ah, al, bh, bl)	\
+  do {						\
+    DWunion __s, __a, __b;			\
+    __a.s.low = (al); __a.s.high = (ah);	\
+    __b.s.low = (bl); __b.s.high = (bh);	\
+    __s.ll = __a.ll - __b.ll;			\
+    (sl) = __s.s.low; (sh) = __s.s.high;	\
+  } while (0)
+# define udiv_qrnnd(q, r, nh, nl, d)		\
+  asm("divu %2,%0" : "=D"(q), "=z"(r) : "D"(d), "0"(nl), "1"(nh))
+# define sdiv_qrnnd(q, r, nh, nl, d)		\
+  asm("div %2,%0" : "=D"(q), "=z"(r) : "D"(d), "0"(nl), "1"(nh))
+# define UMUL_TIME 3
+# define UDIV_TIME 38
+#endif
+
+#if defined (__mips__) && W_TYPE_SIZE == 32
+#define umul_ppmm(w1, w0, u, v)						\
+  do {									\
+    UDItype __x = (UDItype) (USItype) (u) * (USItype) (v);		\
+    (w1) = (USItype) (__x >> 32);					\
+    (w0) = (USItype) (__x);						\
+  } while (0)
+#define UMUL_TIME 10
+#define UDIV_TIME 100
+
+#if (__mips == 32 || __mips == 64) && ! defined (__mips16)
+#define count_leading_zeros(COUNT,X)	((COUNT) = __builtin_clz (X))
+#define COUNT_LEADING_ZEROS_0 32
+#endif
+#endif /* __mips__ */
+
+#if defined (__ns32000__) && W_TYPE_SIZE == 32
+#define umul_ppmm(w1, w0, u, v) \
+  ({union {UDItype __ll;						\
+	   struct {USItype __l, __h;} __i;				\
+	  } __xx;							\
+  __asm__ ("meid %2,%0"							\
+	   : "=g" (__xx.__ll)						\
+	   : "%0" ((USItype) (u)),					\
+	     "g" ((USItype) (v)));					\
+  (w1) = __xx.__i.__h; (w0) = __xx.__i.__l;})
+#define __umulsidi3(u, v) \
+  ({UDItype __w;							\
+    __asm__ ("meid %2,%0"						\
+	     : "=g" (__w)						\
+	     : "%0" ((USItype) (u)),					\
+	       "g" ((USItype) (v)));					\
+    __w; })
+#define udiv_qrnnd(q, r, n1, n0, d) \
+  ({union {UDItype __ll;						\
+	   struct {USItype __l, __h;} __i;				\
+	  } __xx;							\
+  __xx.__i.__h = (n1); __xx.__i.__l = (n0);				\
+  __asm__ ("deid %2,%0"							\
+	   : "=g" (__xx.__ll)						\
+	   : "0" (__xx.__ll),						\
+	     "g" ((USItype) (d)));					\
+  (r) = __xx.__i.__l; (q) = __xx.__i.__h; })
+#define count_trailing_zeros(count,x) \
+  do {									\
+    __asm__ ("ffsd     %2,%0"						\
+	    : "=r" ((USItype) (count))					\
+	    : "0" ((USItype) 0),					\
+	      "r" ((USItype) (x)));					\
+  } while (0)
+#endif /* __ns32000__ */
+
+/* FIXME: We should test _IBMR2 here when we add assembly support for the
+   system vendor compilers.
+   FIXME: What's needed for gcc PowerPC VxWorks?  __vxworks__ is not good
+   enough, since that hits ARM and m68k too.  */
+#if (defined (_ARCH_PPC)	/* AIX */				\
+     || defined (__powerpc__)	/* gcc */				\
+     || defined (__POWERPC__)	/* BEOS */				\
+     || defined (__ppc__)	/* Darwin */				\
+     || (defined (PPC) && ! defined (CPU_FAMILY)) /* gcc 2.7.x GNU&SysV */    \
+     || (defined (PPC) && defined (CPU_FAMILY)    /* VxWorks */               \
+	 && CPU_FAMILY == PPC)                                                \
+     ) && W_TYPE_SIZE == 32
+#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
+  do {									\
+    if (__builtin_constant_p (bh) && (bh) == 0)				\
+      __asm__ ("add%I4c %1,%3,%4\n\taddze %0,%2"		\
+	     : "=r" (sh), "=&r" (sl) : "r" (ah), "%r" (al), "rI" (bl));\
+    else if (__builtin_constant_p (bh) && (bh) == ~(USItype) 0)		\
+      __asm__ ("add%I4c %1,%3,%4\n\taddme %0,%2"		\
+	     : "=r" (sh), "=&r" (sl) : "r" (ah), "%r" (al), "rI" (bl));\
+    else								\
+      __asm__ ("add%I5c %1,%4,%5\n\tadde %0,%2,%3"		\
+	     : "=r" (sh), "=&r" (sl)					\
+	     : "%r" (ah), "r" (bh), "%r" (al), "rI" (bl));		\
+  } while (0)
+#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
+  do {									\
+    if (__builtin_constant_p (ah) && (ah) == 0)				\
+      __asm__ ("subf%I3c %1,%4,%3\n\tsubfze %0,%2"	\
+	       : "=r" (sh), "=&r" (sl) : "r" (bh), "rI" (al), "r" (bl));\
+    else if (__builtin_constant_p (ah) && (ah) == ~(USItype) 0)		\
+      __asm__ ("subf%I3c %1,%4,%3\n\tsubfme %0,%2"	\
+	       : "=r" (sh), "=&r" (sl) : "r" (bh), "rI" (al), "r" (bl));\
+    else if (__builtin_constant_p (bh) && (bh) == 0)			\
+      __asm__ ("subf%I3c %1,%4,%3\n\taddme %0,%2"		\
+	       : "=r" (sh), "=&r" (sl) : "r" (ah), "rI" (al), "r" (bl));\
+    else if (__builtin_constant_p (bh) && (bh) == ~(USItype) 0)		\
+      __asm__ ("subf%I3c %1,%4,%3\n\taddze %0,%2"		\
+	       : "=r" (sh), "=&r" (sl) : "r" (ah), "rI" (al), "r" (bl));\
+    else								\
+      __asm__ ("subf%I4c %1,%5,%4\n\tsubfe %0,%3,%2"	\
+	       : "=r" (sh), "=&r" (sl)					\
+	       : "r" (ah), "r" (bh), "rI" (al), "r" (bl));		\
+  } while (0)
+#define count_leading_zeros(count, x) \
+  __asm__ ("cntlzw %0,%1" : "=r" (count) : "r" (x))
+#define COUNT_LEADING_ZEROS_0 32
+#if defined (_ARCH_PPC) || defined (__powerpc__) || defined (__POWERPC__) \
+  || defined (__ppc__)                                                    \
+  || (defined (PPC) && ! defined (CPU_FAMILY)) /* gcc 2.7.x GNU&SysV */       \
+  || (defined (PPC) && defined (CPU_FAMILY)    /* VxWorks */                  \
+	 && CPU_FAMILY == PPC)
+#define umul_ppmm(ph, pl, m0, m1) \
+  do {									\
+    USItype __m0 = (m0), __m1 = (m1);					\
+    __asm__ ("mulhwu %0,%1,%2" : "=r" (ph) : "%r" (m0), "r" (m1));	\
+    (pl) = __m0 * __m1;							\
+  } while (0)
+#define UMUL_TIME 15
+#define smul_ppmm(ph, pl, m0, m1) \
+  do {									\
+    SItype __m0 = (m0), __m1 = (m1);					\
+    __asm__ ("mulhw %0,%1,%2" : "=r" (ph) : "%r" (m0), "r" (m1));	\
+    (pl) = __m0 * __m1;							\
+  } while (0)
+#define SMUL_TIME 14
+#define UDIV_TIME 120
+#endif
+#endif /* 32-bit POWER architecture variants.  */
+
+/* We should test _IBMR2 here when we add assembly support for the system
+   vendor compilers.  */
+#if (defined (_ARCH_PPC64) || defined (__powerpc64__)) && W_TYPE_SIZE == 64
+#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
+  do {									\
+    if (__builtin_constant_p (bh) && (bh) == 0)				\
+      __asm__ ("add%I4c %1,%3,%4\n\taddze %0,%2"		\
+	     : "=r" (sh), "=&r" (sl) : "r" (ah), "%r" (al), "rI" (bl));\
+    else if (__builtin_constant_p (bh) && (bh) == ~(UDItype) 0)		\
+      __asm__ ("add%I4c %1,%3,%4\n\taddme %0,%2"		\
+	     : "=r" (sh), "=&r" (sl) : "r" (ah), "%r" (al), "rI" (bl));\
+    else								\
+      __asm__ ("add%I5c %1,%4,%5\n\tadde %0,%2,%3"		\
+	     : "=r" (sh), "=&r" (sl)					\
+	     : "%r" (ah), "r" (bh), "%r" (al), "rI" (bl));		\
+  } while (0)
+#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
+  do {									\
+    if (__builtin_constant_p (ah) && (ah) == 0)				\
+      __asm__ ("subf%I3c %1,%4,%3\n\tsubfze %0,%2"	\
+	       : "=r" (sh), "=&r" (sl) : "r" (bh), "rI" (al), "r" (bl));\
+    else if (__builtin_constant_p (ah) && (ah) == ~(UDItype) 0)		\
+      __asm__ ("subf%I3c %1,%4,%3\n\tsubfme %0,%2"	\
+	       : "=r" (sh), "=&r" (sl) : "r" (bh), "rI" (al), "r" (bl));\
+    else if (__builtin_constant_p (bh) && (bh) == 0)			\
+      __asm__ ("subf%I3c %1,%4,%3\n\taddme %0,%2"		\
+	       : "=r" (sh), "=&r" (sl) : "r" (ah), "rI" (al), "r" (bl));\
+    else if (__builtin_constant_p (bh) && (bh) == ~(UDItype) 0)		\
+      __asm__ ("subf%I3c %1,%4,%3\n\taddze %0,%2"		\
+	       : "=r" (sh), "=&r" (sl) : "r" (ah), "rI" (al), "r" (bl));\
+    else								\
+      __asm__ ("subf%I4c %1,%5,%4\n\tsubfe %0,%3,%2"	\
+	       : "=r" (sh), "=&r" (sl)					\
+	       : "r" (ah), "r" (bh), "rI" (al), "r" (bl));		\
+  } while (0)
+#define count_leading_zeros(count, x) \
+  __asm__ ("cntlzd %0,%1" : "=r" (count) : "r" (x))
+#define COUNT_LEADING_ZEROS_0 64
+#define umul_ppmm(ph, pl, m0, m1) \
+  do {									\
+    UDItype __m0 = (m0), __m1 = (m1);					\
+    __asm__ ("mulhdu %0,%1,%2" : "=r" (ph) : "%r" (m0), "r" (m1));	\
+    (pl) = __m0 * __m1;							\
+  } while (0)
+#define UMUL_TIME 15
+#define smul_ppmm(ph, pl, m0, m1) \
+  do {									\
+    DItype __m0 = (m0), __m1 = (m1);					\
+    __asm__ ("mulhd %0,%1,%2" : "=r" (ph) : "%r" (m0), "r" (m1));	\
+    (pl) = __m0 * __m1;							\
+  } while (0)
+#define SMUL_TIME 14  /* ??? */
+#define UDIV_TIME 120 /* ??? */
+#endif /* 64-bit PowerPC.  */
+
+#if defined (__ibm032__) /* RT/ROMP */ && W_TYPE_SIZE == 32
+#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
+  __asm__ ("a %1,%5\n\tae %0,%3"					\
+	   : "=r" ((USItype) (sh)),					\
+	     "=&r" ((USItype) (sl))					\
+	   : "%0" ((USItype) (ah)),					\
+	     "r" ((USItype) (bh)),					\
+	     "%1" ((USItype) (al)),					\
+	     "r" ((USItype) (bl)))
+#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
+  __asm__ ("s %1,%5\n\tse %0,%3"					\
+	   : "=r" ((USItype) (sh)),					\
+	     "=&r" ((USItype) (sl))					\
+	   : "0" ((USItype) (ah)),					\
+	     "r" ((USItype) (bh)),					\
+	     "1" ((USItype) (al)),					\
+	     "r" ((USItype) (bl)))
+#define umul_ppmm(ph, pl, m0, m1) \
+  do {									\
+    USItype __m0 = (m0), __m1 = (m1);					\
+    __asm__ (								\
+       "s	r2,r2\n"						\
+"	mts	r10,%2\n"						\
+"	m	r2,%3\n"						\
+"	m	r2,%3\n"						\
+"	m	r2,%3\n"						\
+"	m	r2,%3\n"						\
+"	m	r2,%3\n"						\
+"	m	r2,%3\n"						\
+"	m	r2,%3\n"						\
+"	m	r2,%3\n"						\
+"	m	r2,%3\n"						\
+"	m	r2,%3\n"						\
+"	m	r2,%3\n"						\
+"	m	r2,%3\n"						\
+"	m	r2,%3\n"						\
+"	m	r2,%3\n"						\
+"	m	r2,%3\n"						\
+"	m	r2,%3\n"						\
+"	cas	%0,r2,r0\n"						\
+"	mfs	r10,%1"							\
+	     : "=r" ((USItype) (ph)),					\
+	       "=r" ((USItype) (pl))					\
+	     : "%r" (__m0),						\
+		"r" (__m1)						\
+	     : "r2");							\
+    (ph) += ((((SItype) __m0 >> 31) & __m1)				\
+	     + (((SItype) __m1 >> 31) & __m0));				\
+  } while (0)
+#define UMUL_TIME 20
+#define UDIV_TIME 200
+#define count_leading_zeros(count, x) \
+  do {									\
+    if ((x) >= 0x10000)							\
+      __asm__ ("clz	%0,%1"						\
+	       : "=r" ((USItype) (count))				\
+	       : "r" ((USItype) (x) >> 16));				\
+    else								\
+      {									\
+	__asm__ ("clz	%0,%1"						\
+		 : "=r" ((USItype) (count))				\
+		 : "r" ((USItype) (x)));					\
+	(count) += 16;							\
+      }									\
+  } while (0)
+#endif
+
+#if defined(__sh__) && (!defined (__SHMEDIA__) || !__SHMEDIA__) && W_TYPE_SIZE == 32
+#ifndef __sh1__
+#define umul_ppmm(w1, w0, u, v) \
+  __asm__ (								\
+       "dmulu.l	%2,%3\n\tsts%M1	macl,%1\n\tsts%M0	mach,%0"	\
+	   : "=r<" ((USItype)(w1)),					\
+	     "=r<" ((USItype)(w0))					\
+	   : "r" ((USItype)(u)),					\
+	     "r" ((USItype)(v))						\
+	   : "macl", "mach")
+#define UMUL_TIME 5
+#endif
+
+/* This is the same algorithm as __udiv_qrnnd_c.  */
+#define UDIV_NEEDS_NORMALIZATION 1
+
+#ifdef __FDPIC__
+/* FDPIC needs a special version of the asm fragment to extract the
+   code address from the function descriptor. __udiv_qrnnd_16 is
+   assumed to be local and not to use the GOT, so loading r12 is
+   not needed. */
+#define udiv_qrnnd(q, r, n1, n0, d) \
+  do {									\
+    extern UWtype __udiv_qrnnd_16 (UWtype, UWtype)			\
+			__attribute__ ((visibility ("hidden")));	\
+    /* r0: rn r1: qn */ /* r0: n1 r4: n0 r5: d r6: d1 */ /* r2: __m */	\
+    __asm__ (								\
+	"mov%M4	%4,r5\n"						\
+"	swap.w	%3,r4\n"						\
+"	swap.w	r5,r6\n"						\
+"	mov.l	@%5,r2\n"						\
+"	jsr	@r2\n"							\
+"	shll16	r6\n"							\
+"	swap.w	r4,r4\n"						\
+"	mov.l	@%5,r2\n"						\
+"	jsr	@r2\n"							\
+"	swap.w	r1,%0\n"						\
+"	or	r1,%0"							\
+	: "=r" (q), "=&z" (r)						\
+	: "1" (n1), "r" (n0), "rm" (d), "r" (&__udiv_qrnnd_16)		\
+	: "r1", "r2", "r4", "r5", "r6", "pr", "t");			\
+  } while (0)
+#else
+#define udiv_qrnnd(q, r, n1, n0, d) \
+  do {									\
+    extern UWtype __udiv_qrnnd_16 (UWtype, UWtype)			\
+			__attribute__ ((visibility ("hidden")));	\
+    /* r0: rn r1: qn */ /* r0: n1 r4: n0 r5: d r6: d1 */ /* r2: __m */	\
+    __asm__ (								\
+	"mov%M4 %4,r5\n"						\
+"	swap.w %3,r4\n"							\
+"	swap.w r5,r6\n"							\
+"	jsr @%5\n"							\
+"	shll16 r6\n"							\
+"	swap.w r4,r4\n"							\
+"	jsr @%5\n"							\
+"	swap.w r1,%0\n"							\
+"	or r1,%0"							\
+	: "=r" (q), "=&z" (r)						\
+	: "1" (n1), "r" (n0), "rm" (d), "r" (&__udiv_qrnnd_16)		\
+	: "r1", "r2", "r4", "r5", "r6", "pr", "t");			\
+  } while (0)
+#endif /* __FDPIC__  */
+
+#define UDIV_TIME 80
+
+#define sub_ddmmss(sh, sl, ah, al, bh, bl)				\
+  __asm__ ("clrt;subc %5,%1; subc %4,%0"				\
+	   : "=r" (sh), "=r" (sl)					\
+	   : "0" (ah), "1" (al), "r" (bh), "r" (bl) : "t")
+
+#endif /* __sh__ */
+
+#if defined (__SH5__) && defined (__SHMEDIA__) && __SHMEDIA__ && W_TYPE_SIZE == 32
+#define __umulsidi3(u,v) ((UDItype)(USItype)u*(USItype)v)
+#define count_leading_zeros(count, x) \
+  do									\
+    {									\
+      UDItype x_ = (USItype)(x);					\
+      SItype c_;							\
+									\
+      __asm__ ("nsb %1, %0" : "=r" (c_) : "r" (x_));			\
+      (count) = c_ - 31;						\
+    }									\
+  while (0)
+#define COUNT_LEADING_ZEROS_0 32
+#endif
+
+#if defined (__sparc__) && !defined (__arch64__) && !defined (__sparcv9) \
+    && W_TYPE_SIZE == 32
+#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
+  __asm__ ("addcc %r4,%5,%1\n\taddx %r2,%3,%0"				\
+	   : "=r" ((USItype) (sh)),					\
+	     "=&r" ((USItype) (sl))					\
+	   : "%rJ" ((USItype) (ah)),					\
+	     "rI" ((USItype) (bh)),					\
+	     "%rJ" ((USItype) (al)),					\
+	     "rI" ((USItype) (bl))					\
+	   __CLOBBER_CC)
+#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
+  __asm__ ("subcc %r4,%5,%1\n\tsubx %r2,%3,%0"				\
+	   : "=r" ((USItype) (sh)),					\
+	     "=&r" ((USItype) (sl))					\
+	   : "rJ" ((USItype) (ah)),					\
+	     "rI" ((USItype) (bh)),					\
+	     "rJ" ((USItype) (al)),					\
+	     "rI" ((USItype) (bl))					\
+	   __CLOBBER_CC)
+#if defined (__sparc_v9__)
+#define umul_ppmm(w1, w0, u, v) \
+  do {									\
+    register USItype __g1 asm ("g1");					\
+    __asm__ ("umul\t%2,%3,%1\n\t"					\
+	     "srlx\t%1, 32, %0"						\
+	     : "=r" ((USItype) (w1)),					\
+	       "=r" (__g1)						\
+	     : "r" ((USItype) (u)),					\
+	       "r" ((USItype) (v)));					\
+    (w0) = __g1;							\
+  } while (0)
+#define udiv_qrnnd(__q, __r, __n1, __n0, __d) \
+  __asm__ ("mov\t%2,%%y\n\t"						\
+	   "udiv\t%3,%4,%0\n\t"						\
+	   "umul\t%0,%4,%1\n\t"						\
+	   "sub\t%3,%1,%1"						\
+	   : "=&r" ((USItype) (__q)),					\
+	     "=&r" ((USItype) (__r))					\
+	   : "r" ((USItype) (__n1)),					\
+	     "r" ((USItype) (__n0)),					\
+	     "r" ((USItype) (__d)))
+#else
+#if defined (__sparc_v8__)
+#define umul_ppmm(w1, w0, u, v) \
+  __asm__ ("umul %2,%3,%1;rd %%y,%0"					\
+	   : "=r" ((USItype) (w1)),					\
+	     "=r" ((USItype) (w0))					\
+	   : "r" ((USItype) (u)),					\
+	     "r" ((USItype) (v)))
+#define udiv_qrnnd(__q, __r, __n1, __n0, __d) \
+  __asm__ ("mov %2,%%y;nop;nop;nop;udiv %3,%4,%0;umul %0,%4,%1;sub %3,%1,%1"\
+	   : "=&r" ((USItype) (__q)),					\
+	     "=&r" ((USItype) (__r))					\
+	   : "r" ((USItype) (__n1)),					\
+	     "r" ((USItype) (__n0)),					\
+	     "r" ((USItype) (__d)))
+#else
+#if defined (__sparclite__)
+/* This has hardware multiply but not divide.  It also has two additional
+   instructions scan (ffs from high bit) and divscc.  */
+#define umul_ppmm(w1, w0, u, v) \
+  __asm__ ("umul %2,%3,%1;rd %%y,%0"					\
+	   : "=r" ((USItype) (w1)),					\
+	     "=r" ((USItype) (w0))					\
+	   : "r" ((USItype) (u)),					\
+	     "r" ((USItype) (v)))
+#define udiv_qrnnd(q, r, n1, n0, d) \
+  __asm__ ("! Inlined udiv_qrnnd\n"					\
+"	wr	%%g0,%2,%%y	! Not a delayed write for sparclite\n"	\
+"	tst	%%g0\n"							\
+"	divscc	%3,%4,%%g1\n"						\
+"	divscc	%%g1,%4,%%g1\n"						\
+"	divscc	%%g1,%4,%%g1\n"						\
+"	divscc	%%g1,%4,%%g1\n"						\
+"	divscc	%%g1,%4,%%g1\n"						\
+"	divscc	%%g1,%4,%%g1\n"						\
+"	divscc	%%g1,%4,%%g1\n"						\
+"	divscc	%%g1,%4,%%g1\n"						\
+"	divscc	%%g1,%4,%%g1\n"						\
+"	divscc	%%g1,%4,%%g1\n"						\
+"	divscc	%%g1,%4,%%g1\n"						\
+"	divscc	%%g1,%4,%%g1\n"						\
+"	divscc	%%g1,%4,%%g1\n"						\
+"	divscc	%%g1,%4,%%g1\n"						\
+"	divscc	%%g1,%4,%%g1\n"						\
+"	divscc	%%g1,%4,%%g1\n"						\
+"	divscc	%%g1,%4,%%g1\n"						\
+"	divscc	%%g1,%4,%%g1\n"						\
+"	divscc	%%g1,%4,%%g1\n"						\
+"	divscc	%%g1,%4,%%g1\n"						\
+"	divscc	%%g1,%4,%%g1\n"						\
+"	divscc	%%g1,%4,%%g1\n"						\
+"	divscc	%%g1,%4,%%g1\n"						\
+"	divscc	%%g1,%4,%%g1\n"						\
+"	divscc	%%g1,%4,%%g1\n"						\
+"	divscc	%%g1,%4,%%g1\n"						\
+"	divscc	%%g1,%4,%%g1\n"						\
+"	divscc	%%g1,%4,%%g1\n"						\
+"	divscc	%%g1,%4,%%g1\n"						\
+"	divscc	%%g1,%4,%%g1\n"						\
+"	divscc	%%g1,%4,%%g1\n"						\
+"	divscc	%%g1,%4,%0\n"						\
+"	rd	%%y,%1\n"						\
+"	bl,a 1f\n"							\
+"	add	%1,%4,%1\n"						\
+"1:	! End of inline udiv_qrnnd"					\
+	   : "=r" ((USItype) (q)),					\
+	     "=r" ((USItype) (r))					\
+	   : "r" ((USItype) (n1)),					\
+	     "r" ((USItype) (n0)),					\
+	     "rI" ((USItype) (d))					\
+	   : "g1" __AND_CLOBBER_CC)
+#define UDIV_TIME 37
+#define count_leading_zeros(count, x) \
+  do {                                                                  \
+  __asm__ ("scan %1,1,%0"                                               \
+	   : "=r" ((USItype) (count))                                   \
+	   : "r" ((USItype) (x)));					\
+  } while (0)
+/* Early sparclites return 63 for an argument of 0, but they warn that future
+   implementations might change this.  Therefore, leave COUNT_LEADING_ZEROS_0
+   undefined.  */
+#else
+/* SPARC without integer multiplication and divide instructions.
+   (i.e. at least Sun4/20,40,60,65,75,110,260,280,330,360,380,470,490) */
+#define umul_ppmm(w1, w0, u, v) \
+  __asm__ ("! Inlined umul_ppmm\n"					\
+"	wr	%%g0,%2,%%y	! SPARC has 0-3 delay insn after a wr\n"\
+"	sra	%3,31,%%o5	! Don't move this insn\n"		\
+"	and	%2,%%o5,%%o5	! Don't move this insn\n"		\
+"	andcc	%%g0,0,%%g1	! Don't move this insn\n"		\
+"	mulscc	%%g1,%3,%%g1\n"						\
+"	mulscc	%%g1,%3,%%g1\n"						\
+"	mulscc	%%g1,%3,%%g1\n"						\
+"	mulscc	%%g1,%3,%%g1\n"						\
+"	mulscc	%%g1,%3,%%g1\n"						\
+"	mulscc	%%g1,%3,%%g1\n"						\
+"	mulscc	%%g1,%3,%%g1\n"						\
+"	mulscc	%%g1,%3,%%g1\n"						\
+"	mulscc	%%g1,%3,%%g1\n"						\
+"	mulscc	%%g1,%3,%%g1\n"						\
+"	mulscc	%%g1,%3,%%g1\n"						\
+"	mulscc	%%g1,%3,%%g1\n"						\
+"	mulscc	%%g1,%3,%%g1\n"						\
+"	mulscc	%%g1,%3,%%g1\n"						\
+"	mulscc	%%g1,%3,%%g1\n"						\
+"	mulscc	%%g1,%3,%%g1\n"						\
+"	mulscc	%%g1,%3,%%g1\n"						\
+"	mulscc	%%g1,%3,%%g1\n"						\
+"	mulscc	%%g1,%3,%%g1\n"						\
+"	mulscc	%%g1,%3,%%g1\n"						\
+"	mulscc	%%g1,%3,%%g1\n"						\
+"	mulscc	%%g1,%3,%%g1\n"						\
+"	mulscc	%%g1,%3,%%g1\n"						\
+"	mulscc	%%g1,%3,%%g1\n"						\
+"	mulscc	%%g1,%3,%%g1\n"						\
+"	mulscc	%%g1,%3,%%g1\n"						\
+"	mulscc	%%g1,%3,%%g1\n"						\
+"	mulscc	%%g1,%3,%%g1\n"						\
+"	mulscc	%%g1,%3,%%g1\n"						\
+"	mulscc	%%g1,%3,%%g1\n"						\
+"	mulscc	%%g1,%3,%%g1\n"						\
+"	mulscc	%%g1,%3,%%g1\n"						\
+"	mulscc	%%g1,0,%%g1\n"						\
+"	add	%%g1,%%o5,%0\n"						\
+"	rd	%%y,%1"							\
+	   : "=r" ((USItype) (w1)),					\
+	     "=r" ((USItype) (w0))					\
+	   : "%rI" ((USItype) (u)),					\
+	     "r" ((USItype) (v))						\
+	   : "g1", "o5" __AND_CLOBBER_CC)
+#define UMUL_TIME 39		/* 39 instructions */
+/* It's quite necessary to add this much assembler for the sparc.
+   The default udiv_qrnnd (in C) is more than 10 times slower!  */
+#define udiv_qrnnd(__q, __r, __n1, __n0, __d) \
+  __asm__ ("! Inlined udiv_qrnnd\n"					\
+"	mov	32,%%g1\n"						\
+"	subcc	%1,%2,%%g0\n"						\
+"1:	bcs	5f\n"							\
+"	 addxcc %0,%0,%0	! shift n1n0 and a q-bit in lsb\n"	\
+"	sub	%1,%2,%1	! this kills msb of n\n"		\
+"	addx	%1,%1,%1	! so this can't give carry\n"		\
+"	subcc	%%g1,1,%%g1\n"						\
+"2:	bne	1b\n"							\
+"	 subcc	%1,%2,%%g0\n"						\
+"	bcs	3f\n"							\
+"	 addxcc %0,%0,%0	! shift n1n0 and a q-bit in lsb\n"	\
+"	b	3f\n"							\
+"	 sub	%1,%2,%1	! this kills msb of n\n"		\
+"4:	sub	%1,%2,%1\n"						\
+"5:	addxcc	%1,%1,%1\n"						\
+"	bcc	2b\n"							\
+"	 subcc	%%g1,1,%%g1\n"						\
+"! Got carry from n.  Subtract next step to cancel this carry.\n"	\
+"	bne	4b\n"							\
+"	 addcc	%0,%0,%0	! shift n1n0 and a 0-bit in lsb\n"	\
+"	sub	%1,%2,%1\n"						\
+"3:	xnor	%0,0,%0\n"						\
+"	! End of inline udiv_qrnnd"					\
+	   : "=&r" ((USItype) (__q)),					\
+	     "=&r" ((USItype) (__r))					\
+	   : "r" ((USItype) (__d)),					\
+	     "1" ((USItype) (__n1)),					\
+	     "0" ((USItype) (__n0)) : "g1" __AND_CLOBBER_CC)
+#define UDIV_TIME (3+7*32)	/* 7 instructions/iteration. 32 iterations.  */
+#endif /* __sparclite__ */
+#endif /* __sparc_v8__ */
+#endif /* __sparc_v9__ */
+#endif /* sparc32 */
+
+#if ((defined (__sparc__) && defined (__arch64__)) || defined (__sparcv9)) \
+    && W_TYPE_SIZE == 64
+#define add_ssaaaa(sh, sl, ah, al, bh, bl)				\
+  do {									\
+    UDItype __carry = 0;						\
+    __asm__ ("addcc\t%r5,%6,%1\n\t"					\
+	     "add\t%r3,%4,%0\n\t"					\
+	     "movcs\t%%xcc, 1, %2\n\t"					\
+	     "add\t%0, %2, %0"						\
+	     : "=r" ((UDItype)(sh)),				      	\
+	       "=&r" ((UDItype)(sl)),				      	\
+	       "+r" (__carry)				      		\
+	     : "%rJ" ((UDItype)(ah)),				     	\
+	       "rI" ((UDItype)(bh)),				      	\
+	       "%rJ" ((UDItype)(al)),				     	\
+	       "rI" ((UDItype)(bl))				       	\
+	     __CLOBBER_CC);						\
+  } while (0)
+
+#define sub_ddmmss(sh, sl, ah, al, bh, bl)				\
+  do {									\
+    UDItype __carry = 0;						\
+    __asm__ ("subcc\t%r5,%6,%1\n\t"					\
+	     "sub\t%r3,%4,%0\n\t"					\
+	     "movcs\t%%xcc, 1, %2\n\t"					\
+	     "sub\t%0, %2, %0"						\
+	     : "=r" ((UDItype)(sh)),				      	\
+	       "=&r" ((UDItype)(sl)),				      	\
+	       "+r" (__carry)				      		\
+	     : "%rJ" ((UDItype)(ah)),				     	\
+	       "rI" ((UDItype)(bh)),				      	\
+	       "%rJ" ((UDItype)(al)),				     	\
+	       "rI" ((UDItype)(bl))				       	\
+	     __CLOBBER_CC);						\
+  } while (0)
+
+#define umul_ppmm(wh, wl, u, v)						\
+  do {									\
+	  UDItype tmp1, tmp2, tmp3, tmp4;				\
+	  __asm__ __volatile__ (					\
+		   "srl %7,0,%3\n\t"					\
+		   "mulx %3,%6,%1\n\t"					\
+		   "srlx %6,32,%2\n\t"					\
+		   "mulx %2,%3,%4\n\t"					\
+		   "sllx %4,32,%5\n\t"					\
+		   "srl %6,0,%3\n\t"					\
+		   "sub %1,%5,%5\n\t"					\
+		   "srlx %5,32,%5\n\t"					\
+		   "addcc %4,%5,%4\n\t"					\
+		   "srlx %7,32,%5\n\t"					\
+		   "mulx %3,%5,%3\n\t"					\
+		   "mulx %2,%5,%5\n\t"					\
+		   "sethi %%hi(0x80000000),%2\n\t"			\
+		   "addcc %4,%3,%4\n\t"					\
+		   "srlx %4,32,%4\n\t"					\
+		   "add %2,%2,%2\n\t"					\
+		   "movcc %%xcc,%%g0,%2\n\t"				\
+		   "addcc %5,%4,%5\n\t"					\
+		   "sllx %3,32,%3\n\t"					\
+		   "add %1,%3,%1\n\t"					\
+		   "add %5,%2,%0"					\
+	   : "=r" ((UDItype)(wh)),					\
+	     "=&r" ((UDItype)(wl)),					\
+	     "=&r" (tmp1), "=&r" (tmp2), "=&r" (tmp3), "=&r" (tmp4)	\
+	   : "r" ((UDItype)(u)),					\
+	     "r" ((UDItype)(v))						\
+	   __CLOBBER_CC);						\
+  } while (0)
+#define UMUL_TIME 96
+#define UDIV_TIME 230
+#endif /* sparc64 */
+
+#if defined (__vax__) && W_TYPE_SIZE == 32
+#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
+  __asm__ ("addl2 %5,%1\n\tadwc %3,%0"					\
+	   : "=g" ((USItype) (sh)),					\
+	     "=&g" ((USItype) (sl))					\
+	   : "%0" ((USItype) (ah)),					\
+	     "g" ((USItype) (bh)),					\
+	     "%1" ((USItype) (al)),					\
+	     "g" ((USItype) (bl)))
+#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
+  __asm__ ("subl2 %5,%1\n\tsbwc %3,%0"					\
+	   : "=g" ((USItype) (sh)),					\
+	     "=&g" ((USItype) (sl))					\
+	   : "0" ((USItype) (ah)),					\
+	     "g" ((USItype) (bh)),					\
+	     "1" ((USItype) (al)),					\
+	     "g" ((USItype) (bl)))
+#define umul_ppmm(xh, xl, m0, m1) \
+  do {									\
+    union {								\
+	UDItype __ll;							\
+	struct {USItype __l, __h;} __i;					\
+      } __xx;								\
+    USItype __m0 = (m0), __m1 = (m1);					\
+    __asm__ ("emul %1,%2,$0,%0"						\
+	     : "=r" (__xx.__ll)						\
+	     : "g" (__m0),						\
+	       "g" (__m1));						\
+    (xh) = __xx.__i.__h;						\
+    (xl) = __xx.__i.__l;						\
+    (xh) += ((((SItype) __m0 >> 31) & __m1)				\
+	     + (((SItype) __m1 >> 31) & __m0));				\
+  } while (0)
+#define sdiv_qrnnd(q, r, n1, n0, d) \
+  do {									\
+    union {DItype __ll;							\
+	   struct {SItype __l, __h;} __i;				\
+	  } __xx;							\
+    __xx.__i.__h = n1; __xx.__i.__l = n0;				\
+    __asm__ ("ediv %3,%2,%0,%1"						\
+	     : "=g" (q), "=g" (r)					\
+	     : "g" (__xx.__ll), "g" (d));				\
+  } while (0)
+#endif /* __vax__ */
+
+#ifdef _TMS320C6X
+#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
+  do									\
+    {									\
+      UDItype __ll;							\
+      __asm__ ("addu .l1 %1, %2, %0"					\
+	       : "=a" (__ll) : "a" (al), "a" (bl));			\
+      (sl) = (USItype)__ll;						\
+      (sh) = ((USItype)(__ll >> 32)) + (ah) + (bh);			\
+    }									\
+  while (0)
+
+#ifdef _TMS320C6400_PLUS
+#define __umulsidi3(u,v) ((UDItype)(USItype)u*(USItype)v)
+#define umul_ppmm(w1, w0, u, v)						\
+  do {									\
+    UDItype __x = (UDItype) (USItype) (u) * (USItype) (v);		\
+    (w1) = (USItype) (__x >> 32);					\
+    (w0) = (USItype) (__x);						\
+  } while (0)
+#endif  /* _TMS320C6400_PLUS */
+
+#define count_leading_zeros(count, x)	((count) = __builtin_clz (x))
+#ifdef _TMS320C6400
+#define count_trailing_zeros(count, x)	((count) = __builtin_ctz (x))
+#endif
+#define UMUL_TIME 4
+#define UDIV_TIME 40
+#endif /* _TMS320C6X */
+
+#if defined (__xtensa__) && W_TYPE_SIZE == 32
+/* This code is not Xtensa-configuration-specific, so rely on the compiler
+   to expand builtin functions depending on what configuration features
+   are available.  This avoids library calls when the operation can be
+   performed in-line.  */
+#define umul_ppmm(w1, w0, u, v)						\
+  do {									\
+    DWunion __w;							\
+    __w.ll = __builtin_umulsidi3 (u, v);				\
+    w1 = __w.s.high;							\
+    w0 = __w.s.low;							\
+  } while (0)
+#define __umulsidi3(u, v)		__builtin_umulsidi3 (u, v)
+#define count_leading_zeros(COUNT, X)	((COUNT) = __builtin_clz (X))
+#define count_trailing_zeros(COUNT, X)	((COUNT) = __builtin_ctz (X))
+#endif /* __xtensa__ */
+
+#if defined xstormy16
+extern UHItype __stormy16_count_leading_zeros (UHItype);
+#define count_leading_zeros(count, x)					\
+  do									\
+    {									\
+      UHItype size;							\
+									\
+      /* We assume that W_TYPE_SIZE is a multiple of 16...  */		\
+      for ((count) = 0, size = W_TYPE_SIZE; size; size -= 16)		\
+	{								\
+	  UHItype c;							\
+									\
+	  c = __clzhi2 ((x) >> (size - 16));				\
+	  (count) += c;							\
+	  if (c != 16)							\
+	    break;							\
+	}								\
+    }									\
+  while (0)
+#define COUNT_LEADING_ZEROS_0 W_TYPE_SIZE
+#endif
+
+#if defined (__z8000__) && W_TYPE_SIZE == 16
+#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
+  __asm__ ("add	%H1,%H5\n\tadc	%H0,%H3"				\
+	   : "=r" ((unsigned int)(sh)),					\
+	     "=&r" ((unsigned int)(sl))					\
+	   : "%0" ((unsigned int)(ah)),					\
+	     "r" ((unsigned int)(bh)),					\
+	     "%1" ((unsigned int)(al)),					\
+	     "rQR" ((unsigned int)(bl)))
+#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
+  __asm__ ("sub	%H1,%H5\n\tsbc	%H0,%H3"				\
+	   : "=r" ((unsigned int)(sh)),					\
+	     "=&r" ((unsigned int)(sl))					\
+	   : "0" ((unsigned int)(ah)),					\
+	     "r" ((unsigned int)(bh)),					\
+	     "1" ((unsigned int)(al)),					\
+	     "rQR" ((unsigned int)(bl)))
+#define umul_ppmm(xh, xl, m0, m1) \
+  do {									\
+    union {long int __ll;						\
+	   struct {unsigned int __h, __l;} __i;				\
+	  } __xx;							\
+    unsigned int __m0 = (m0), __m1 = (m1);				\
+    __asm__ ("mult	%S0,%H3"					\
+	     : "=r" (__xx.__i.__h),					\
+	       "=r" (__xx.__i.__l)					\
+	     : "%1" (__m0),						\
+	       "rQR" (__m1));						\
+    (xh) = __xx.__i.__h; (xl) = __xx.__i.__l;				\
+    (xh) += ((((signed int) __m0 >> 15) & __m1)				\
+	     + (((signed int) __m1 >> 15) & __m0));			\
+  } while (0)
+#endif /* __z8000__ */
+
+#endif /* __GNUC__ */
+
+/* If this machine has no inline assembler, use C macros.  */
+
+#if !defined (add_ssaaaa)
+#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
+  do {									\
+    UWtype __x;								\
+    __x = (al) + (bl);							\
+    (sh) = (ah) + (bh) + (__x < (al));					\
+    (sl) = __x;								\
+  } while (0)
+#endif
+
+#if !defined (sub_ddmmss)
+#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
+  do {									\
+    UWtype __x;								\
+    __x = (al) - (bl);							\
+    (sh) = (ah) - (bh) - (__x > (al));					\
+    (sl) = __x;								\
+  } while (0)
+#endif
+
+/* If we lack umul_ppmm but have smul_ppmm, define umul_ppmm in terms of
+   smul_ppmm.  */
+#if !defined (umul_ppmm) && defined (smul_ppmm)
+#define umul_ppmm(w1, w0, u, v)						\
+  do {									\
+    UWtype __w1;							\
+    UWtype __xm0 = (u), __xm1 = (v);					\
+    smul_ppmm (__w1, w0, __xm0, __xm1);					\
+    (w1) = __w1 + (-(__xm0 >> (W_TYPE_SIZE - 1)) & __xm1)		\
+		+ (-(__xm1 >> (W_TYPE_SIZE - 1)) & __xm0);		\
+  } while (0)
+#endif
+
+/* If we still don't have umul_ppmm, define it using plain C.  */
+#if !defined (umul_ppmm)
+#define umul_ppmm(w1, w0, u, v)						\
+  do {									\
+    UWtype __x0, __x1, __x2, __x3;					\
+    UHWtype __ul, __vl, __uh, __vh;					\
+									\
+    __ul = __ll_lowpart (u);						\
+    __uh = __ll_highpart (u);						\
+    __vl = __ll_lowpart (v);						\
+    __vh = __ll_highpart (v);						\
+									\
+    __x0 = (UWtype) __ul * __vl;					\
+    __x1 = (UWtype) __ul * __vh;					\
+    __x2 = (UWtype) __uh * __vl;					\
+    __x3 = (UWtype) __uh * __vh;					\
+									\
+    __x1 += __ll_highpart (__x0);/* this can't give carry */		\
+    __x1 += __x2;		/* but this indeed can */		\
+    if (__x1 < __x2)		/* did we get it? */			\
+      __x3 += __ll_B;		/* yes, add it in the proper pos.  */	\
+									\
+    (w1) = __x3 + __ll_highpart (__x1);					\
+    (w0) = __ll_lowpart (__x1) * __ll_B + __ll_lowpart (__x0);		\
+  } while (0)
+#endif
+
+#if !defined (__umulsidi3)
+#define __umulsidi3(u, v) \
+  ({DWunion __w;							\
+    umul_ppmm (__w.s.high, __w.s.low, u, v);				\
+    __w.ll; })
+#endif
+
+/* Define this unconditionally, so it can be used for debugging.  */
+#define __udiv_qrnnd_c(q, r, n1, n0, d) \
+  do {									\
+    UWtype __d1, __d0, __q1, __q0;					\
+    UWtype __r1, __r0, __m;						\
+    __d1 = __ll_highpart (d);						\
+    __d0 = __ll_lowpart (d);						\
+									\
+    __r1 = (n1) % __d1;							\
+    __q1 = (n1) / __d1;							\
+    __m = (UWtype) __q1 * __d0;						\
+    __r1 = __r1 * __ll_B | __ll_highpart (n0);				\
+    if (__r1 < __m)							\
+      {									\
+	__q1--, __r1 += (d);						\
+	if (__r1 >= (d)) /* i.e. we didn't get carry when adding to __r1 */\
+	  if (__r1 < __m)						\
+	    __q1--, __r1 += (d);					\
+      }									\
+    __r1 -= __m;							\
+									\
+    __r0 = __r1 % __d1;							\
+    __q0 = __r1 / __d1;							\
+    __m = (UWtype) __q0 * __d0;						\
+    __r0 = __r0 * __ll_B | __ll_lowpart (n0);				\
+    if (__r0 < __m)							\
+      {									\
+	__q0--, __r0 += (d);						\
+	if (__r0 >= (d))						\
+	  if (__r0 < __m)						\
+	    __q0--, __r0 += (d);					\
+      }									\
+    __r0 -= __m;							\
+									\
+    (q) = (UWtype) __q1 * __ll_B | __q0;				\
+    (r) = __r0;								\
+  } while (0)
+
+/* If the processor has no udiv_qrnnd but sdiv_qrnnd, go through
+   __udiv_w_sdiv (defined in libgcc or elsewhere).  */
+#if !defined (udiv_qrnnd) && defined (sdiv_qrnnd)
+#define udiv_qrnnd(q, r, nh, nl, d) \
+  do {									\
+    extern UWtype __udiv_w_sdiv (UWtype *, UWtype, UWtype, UWtype);	\
+    UWtype __r;								\
+    (q) = __udiv_w_sdiv (&__r, nh, nl, d);				\
+    (r) = __r;								\
+  } while (0)
+#endif
+
+/* If udiv_qrnnd was not defined for this processor, use __udiv_qrnnd_c.  */
+#if !defined (udiv_qrnnd)
+#define UDIV_NEEDS_NORMALIZATION 1
+#define udiv_qrnnd __udiv_qrnnd_c
+#endif
+
+#if !defined (count_leading_zeros)
+#define count_leading_zeros(count, x) \
+  do {									\
+    UWtype __xr = (x);							\
+    UWtype __a;								\
+									\
+    if (W_TYPE_SIZE <= 32)						\
+      {									\
+	__a = __xr < ((UWtype)1<<2*__BITS4)				\
+	  ? (__xr < ((UWtype)1<<__BITS4) ? 0 : __BITS4)			\
+	  : (__xr < ((UWtype)1<<3*__BITS4) ?  2*__BITS4 : 3*__BITS4);	\
+      }									\
+    else								\
+      {									\
+	for (__a = W_TYPE_SIZE - 8; __a > 0; __a -= 8)			\
+	  if (((__xr >> __a) & 0xff) != 0)				\
+	    break;							\
+      }									\
+									\
+    (count) = W_TYPE_SIZE - (__clz_tab[__xr >> __a] + __a);		\
+  } while (0)
+#define COUNT_LEADING_ZEROS_0 W_TYPE_SIZE
+#endif
+
+#if !defined (count_trailing_zeros)
+/* Define count_trailing_zeros using count_leading_zeros.  The latter might be
+   defined in asm, but if it is not, the C version above is good enough.  */
+#define count_trailing_zeros(count, x) \
+  do {									\
+    UWtype __ctz_x = (x);						\
+    UWtype __ctz_c;							\
+    count_leading_zeros (__ctz_c, __ctz_x & -__ctz_x);			\
+    (count) = W_TYPE_SIZE - 1 - __ctz_c;				\
+  } while (0)
+#endif
+
+#ifndef UDIV_NEEDS_NORMALIZATION
+#define UDIV_NEEDS_NORMALIZATION 0
+#endif
diff --git a/REORG.TODO/stdlib/lrand48.c b/REORG.TODO/stdlib/lrand48.c
new file mode 100644
index 0000000000..645977bb96
--- /dev/null
+++ b/REORG.TODO/stdlib/lrand48.c
@@ -0,0 +1,30 @@
+/* Copyright (C) 1995-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <stdlib.h>
+
+
+long int
+lrand48 (void)
+{
+  long int result;
+
+  (void) __nrand48_r (__libc_drand48_data.__x, &__libc_drand48_data, &result);
+
+  return result;
+}
diff --git a/REORG.TODO/stdlib/lrand48_r.c b/REORG.TODO/stdlib/lrand48_r.c
new file mode 100644
index 0000000000..445efe09b6
--- /dev/null
+++ b/REORG.TODO/stdlib/lrand48_r.c
@@ -0,0 +1,30 @@
+/* Copyright (C) 1995-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@gnu.org>, August 1995.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <stdlib.h>
+
+int
+lrand48_r (struct drand48_data *buffer, long int *result)
+{
+  /* Be generous for the arguments, detect some errors.  */
+  if (buffer == NULL)
+   return -1;
+
+  return __nrand48_r (buffer->__x, buffer, result);
+}
+libc_hidden_def (lrand48_r)
diff --git a/REORG.TODO/stdlib/lshift.c b/REORG.TODO/stdlib/lshift.c
new file mode 100644
index 0000000000..c8228f9aa6
--- /dev/null
+++ b/REORG.TODO/stdlib/lshift.c
@@ -0,0 +1,78 @@
+/* mpn_lshift -- Shift left low level.
+
+Copyright (C) 1991-2017 Free Software Foundation, Inc.
+
+This file is part of the GNU MP Library.
+
+The GNU MP Library is free software; you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation; either version 2.1 of the License, or (at your
+option) any later version.
+
+The GNU MP 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 Lesser General Public
+License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with the GNU MP Library; see the file COPYING.LIB.  If not, see
+<http://www.gnu.org/licenses/>.  */
+
+#include <gmp.h>
+#include "gmp-impl.h"
+
+/* Shift U (pointed to by UP and USIZE digits long) CNT bits to the left
+   and store the USIZE least significant digits of the result at WP.
+   Return the bits shifted out from the most significant digit.
+
+   Argument constraints:
+   1. 0 < CNT < BITS_PER_MP_LIMB
+   2. If the result is to be written over the input, WP must be >= UP.
+*/
+
+mp_limb_t
+mpn_lshift (register mp_ptr wp,
+	    register mp_srcptr up, mp_size_t usize,
+	    register unsigned int cnt)
+{
+  register mp_limb_t high_limb, low_limb;
+  register unsigned sh_1, sh_2;
+  register mp_size_t i;
+  mp_limb_t retval;
+
+#ifdef DEBUG
+  if (usize == 0 || cnt == 0)
+    abort ();
+#endif
+
+  sh_1 = cnt;
+#if 0
+  if (sh_1 == 0)
+    {
+      if (wp != up)
+	{
+	  /* Copy from high end to low end, to allow specified input/output
+	     overlapping.  */
+	  for (i = usize - 1; i >= 0; i--)
+	    wp[i] = up[i];
+	}
+      return 0;
+    }
+#endif
+
+  wp += 1;
+  sh_2 = BITS_PER_MP_LIMB - sh_1;
+  i = usize - 1;
+  low_limb = up[i];
+  retval = low_limb >> sh_2;
+  high_limb = low_limb;
+  while (--i >= 0)
+    {
+      low_limb = up[i];
+      wp[i] = (high_limb << sh_1) | (low_limb >> sh_2);
+      high_limb = low_limb;
+    }
+  wp[i] = high_limb << sh_1;
+
+  return retval;
+}
diff --git a/REORG.TODO/stdlib/makecontext.c b/REORG.TODO/stdlib/makecontext.c
new file mode 100644
index 0000000000..b699bd8a56
--- /dev/null
+++ b/REORG.TODO/stdlib/makecontext.c
@@ -0,0 +1,28 @@
+/* Copyright (C) 1998-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <errno.h>
+#include <ucontext.h>
+
+void
+makecontext (ucontext_t *ucp, void (*func) (void), int argc, ...)
+{
+  __set_errno (ENOSYS);
+}
+
+
+stub_warning (makecontext)
diff --git a/REORG.TODO/stdlib/mblen.c b/REORG.TODO/stdlib/mblen.c
new file mode 100644
index 0000000000..b98bb915e4
--- /dev/null
+++ b/REORG.TODO/stdlib/mblen.c
@@ -0,0 +1,68 @@
+/* Copyright (C) 1991-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <stdlib.h>
+#include <string.h>
+#include <wchar.h>
+#include <gconv.h>
+#include <wcsmbs/wcsmbsload.h>
+
+
+/* Internal state.  */
+static mbstate_t state;
+
+/* Return the length of the multibyte character (if there is one)
+   at S which is no longer than N characters.
+   The ISO C standard says that the `mblen' function must not change
+   the state of the `mbtowc' function.  */
+int
+mblen (const char *s, size_t n)
+{
+  int result;
+
+  /* If S is NULL the function has to return null or not null
+     depending on the encoding having a state depending encoding or
+     not.  */
+  if (s == NULL)
+    {
+      const struct gconv_fcts *fcts;
+
+      /* Get the conversion functions.  */
+      fcts = get_gconv_fcts (_NL_CURRENT_DATA (LC_CTYPE));
+
+      /* Reset the state.  */
+      memset (&state, '\0', sizeof state);
+
+      result = fcts->towc->__stateful;
+    }
+  else if (*s == '\0')
+    /* According to the ISO C 89 standard this is the expected behaviour.  */
+    result = 0;
+  else
+    {
+      memset (&state, '\0', sizeof state);
+
+      result = __mbrtowc (NULL, s, n, &state);
+
+      /* The `mbrtowc' functions tell us more than we need.  Fold the -1
+	 and -2 result into -1.  */
+      if (result < 0)
+	result = -1;
+    }
+
+  return result;
+}
diff --git a/REORG.TODO/stdlib/mbstowcs.c b/REORG.TODO/stdlib/mbstowcs.c
new file mode 100644
index 0000000000..8016208e76
--- /dev/null
+++ b/REORG.TODO/stdlib/mbstowcs.c
@@ -0,0 +1,39 @@
+/* Copyright (C) 1991-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <stdlib.h>
+#include <string.h>
+#include <wchar.h>
+
+
+/* Convert the string of multibyte characters in S to `wchar_t's in
+   PWCS, writing no more than N.  Return the number written,
+   or (size_t) -1 if an invalid multibyte character is encountered.
+
+   Attention: this function should NEVER be intentionally used.
+   The interface is completely stupid.  The state is shared between
+   all conversion functions.  You should use instead the restartable
+   version `mbsrtowcs'.  */
+size_t
+mbstowcs (wchar_t *pwcs, const char *s, size_t n)
+{
+  mbstate_t state;
+
+  memset (&state, '\0', sizeof state);
+  /* Return how many we wrote (or maybe an error).  */
+  return __mbsrtowcs (pwcs, &s, n, &state);
+}
diff --git a/REORG.TODO/stdlib/mbtowc.c b/REORG.TODO/stdlib/mbtowc.c
new file mode 100644
index 0000000000..c391726689
--- /dev/null
+++ b/REORG.TODO/stdlib/mbtowc.c
@@ -0,0 +1,72 @@
+/* Copyright (C) 1991-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <stdlib.h>
+#include <string.h>
+#include <wchar.h>
+#include <gconv.h>
+#include <wcsmbs/wcsmbsload.h>
+
+
+/* Convert the multibyte character at S, which is no longer
+   than N characters, to its `wchar_t' representation, placing
+   this n *PWC and returning its length.
+
+   Attention: this function should NEVER be intentionally used.
+   The interface is completely stupid.  The state is shared between
+   all conversion functions.  You should use instead the restartable
+   version `mbrtowc'.  */
+int
+mbtowc (wchar_t *pwc, const char *s, size_t n)
+{
+  int result;
+  static mbstate_t state;
+
+  /* If S is NULL the function has to return null or not null
+     depending on the encoding having a state depending encoding or
+     not.  */
+  if (s == NULL)
+    {
+      const struct gconv_fcts *fcts;
+
+      /* Get the conversion functions.  */
+      fcts = get_gconv_fcts (_NL_CURRENT_DATA (LC_CTYPE));
+
+      /* This is an extension in the Unix standard which does not directly
+	 violate ISO C.  */
+      memset (&state, '\0', sizeof state);
+
+      result = fcts->towc->__stateful;
+    }
+  else if (*s == '\0')
+    {
+      if (pwc != NULL)
+	*pwc = L'\0';
+      result = 0;
+    }
+  else
+    {
+      result = __mbrtowc (pwc, s, n, &state);
+
+      /* The `mbrtowc' functions tell us more than we need.  Fold the -1
+	 and -2 result into -1.  */
+      if (result < 0)
+	result = -1;
+    }
+
+  return result;
+}
diff --git a/REORG.TODO/stdlib/mod_1.c b/REORG.TODO/stdlib/mod_1.c
new file mode 100644
index 0000000000..33ca193ce2
--- /dev/null
+++ b/REORG.TODO/stdlib/mod_1.c
@@ -0,0 +1,189 @@
+/* mpn_mod_1(dividend_ptr, dividend_size, divisor_limb) --
+   Divide (DIVIDEND_PTR,,DIVIDEND_SIZE) by DIVISOR_LIMB.
+   Return the single-limb remainder.
+   There are no constraints on the value of the divisor.
+
+Copyright (C) 1991-2017 Free Software Foundation, Inc.
+
+This file is part of the GNU MP Library.
+
+The GNU MP Library is free software; you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation; either version 2.1 of the License, or (at your
+option) any later version.
+
+The GNU MP 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 Lesser General Public
+License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with the GNU MP Library; see the file COPYING.LIB.  If not, see
+<http://www.gnu.org/licenses/>.  */
+
+#include <gmp.h>
+#include "gmp-impl.h"
+#include "longlong.h"
+
+#ifndef UMUL_TIME
+#define UMUL_TIME 1
+#endif
+
+#ifndef UDIV_TIME
+#define UDIV_TIME UMUL_TIME
+#endif
+
+/* FIXME: We should be using invert_limb (or invert_normalized_limb)
+   here (not udiv_qrnnd).  */
+
+mp_limb_t
+mpn_mod_1 (mp_srcptr dividend_ptr, mp_size_t dividend_size,
+	   mp_limb_t divisor_limb)
+{
+  mp_size_t i;
+  mp_limb_t n1, n0, r;
+  mp_limb_t dummy __attribute__ ((unused));
+
+  /* Botch: Should this be handled at all?  Rely on callers?  */
+  if (dividend_size == 0)
+    return 0;
+
+  /* If multiplication is much faster than division, and the
+     dividend is large, pre-invert the divisor, and use
+     only multiplications in the inner loop.  */
+
+  /* This test should be read:
+       Does it ever help to use udiv_qrnnd_preinv?
+	 && Does what we save compensate for the inversion overhead?  */
+  if (UDIV_TIME > (2 * UMUL_TIME + 6)
+      && (UDIV_TIME - (2 * UMUL_TIME + 6)) * dividend_size > UDIV_TIME)
+    {
+      int normalization_steps;
+
+      count_leading_zeros (normalization_steps, divisor_limb);
+      if (normalization_steps != 0)
+	{
+	  mp_limb_t divisor_limb_inverted;
+
+	  divisor_limb <<= normalization_steps;
+
+	  /* Compute (2**2N - 2**N * DIVISOR_LIMB) / DIVISOR_LIMB.  The
+	     result is a (N+1)-bit approximation to 1/DIVISOR_LIMB, with the
+	     most significant bit (with weight 2**N) implicit.  */
+
+	  /* Special case for DIVISOR_LIMB == 100...000.  */
+	  if (divisor_limb << 1 == 0)
+	    divisor_limb_inverted = ~(mp_limb_t) 0;
+	  else
+	    udiv_qrnnd (divisor_limb_inverted, dummy,
+			-divisor_limb, 0, divisor_limb);
+
+	  n1 = dividend_ptr[dividend_size - 1];
+	  r = n1 >> (BITS_PER_MP_LIMB - normalization_steps);
+
+	  /* Possible optimization:
+	     if (r == 0
+	     && divisor_limb > ((n1 << normalization_steps)
+			     | (dividend_ptr[dividend_size - 2] >> ...)))
+	     ...one division less... */
+
+	  for (i = dividend_size - 2; i >= 0; i--)
+	    {
+	      n0 = dividend_ptr[i];
+	      udiv_qrnnd_preinv (dummy, r, r,
+				 ((n1 << normalization_steps)
+				  | (n0 >> (BITS_PER_MP_LIMB - normalization_steps))),
+				 divisor_limb, divisor_limb_inverted);
+	      n1 = n0;
+	    }
+	  udiv_qrnnd_preinv (dummy, r, r,
+			     n1 << normalization_steps,
+			     divisor_limb, divisor_limb_inverted);
+	  return r >> normalization_steps;
+	}
+      else
+	{
+	  mp_limb_t divisor_limb_inverted;
+
+	  /* Compute (2**2N - 2**N * DIVISOR_LIMB) / DIVISOR_LIMB.  The
+	     result is a (N+1)-bit approximation to 1/DIVISOR_LIMB, with the
+	     most significant bit (with weight 2**N) implicit.  */
+
+	  /* Special case for DIVISOR_LIMB == 100...000.  */
+	  if (divisor_limb << 1 == 0)
+	    divisor_limb_inverted = ~(mp_limb_t) 0;
+	  else
+	    udiv_qrnnd (divisor_limb_inverted, dummy,
+			-divisor_limb, 0, divisor_limb);
+
+	  i = dividend_size - 1;
+	  r = dividend_ptr[i];
+
+	  if (r >= divisor_limb)
+	    r = 0;
+	  else
+	    i--;
+
+	  for (; i >= 0; i--)
+	    {
+	      n0 = dividend_ptr[i];
+	      udiv_qrnnd_preinv (dummy, r, r,
+				 n0, divisor_limb, divisor_limb_inverted);
+	    }
+	  return r;
+	}
+    }
+  else
+    {
+      if (UDIV_NEEDS_NORMALIZATION)
+	{
+	  int normalization_steps;
+
+	  count_leading_zeros (normalization_steps, divisor_limb);
+	  if (normalization_steps != 0)
+	    {
+	      divisor_limb <<= normalization_steps;
+
+	      n1 = dividend_ptr[dividend_size - 1];
+	      r = n1 >> (BITS_PER_MP_LIMB - normalization_steps);
+
+	      /* Possible optimization:
+		 if (r == 0
+		 && divisor_limb > ((n1 << normalization_steps)
+				 | (dividend_ptr[dividend_size - 2] >> ...)))
+		 ...one division less... */
+
+	      for (i = dividend_size - 2; i >= 0; i--)
+		{
+		  n0 = dividend_ptr[i];
+		  udiv_qrnnd (dummy, r, r,
+			      ((n1 << normalization_steps)
+			       | (n0 >> (BITS_PER_MP_LIMB - normalization_steps))),
+			      divisor_limb);
+		  n1 = n0;
+		}
+	      udiv_qrnnd (dummy, r, r,
+			  n1 << normalization_steps,
+			  divisor_limb);
+	      return r >> normalization_steps;
+	    }
+	}
+      /* No normalization needed, either because udiv_qrnnd doesn't require
+	 it, or because DIVISOR_LIMB is already normalized.  */
+
+      i = dividend_size - 1;
+      r = dividend_ptr[i];
+
+      if (r >= divisor_limb)
+	r = 0;
+      else
+	i--;
+
+      for (; i >= 0; i--)
+	{
+	  n0 = dividend_ptr[i];
+	  udiv_qrnnd (dummy, r, r, n0, divisor_limb);
+	}
+      return r;
+    }
+}
diff --git a/REORG.TODO/stdlib/monetary.h b/REORG.TODO/stdlib/monetary.h
new file mode 100644
index 0000000000..dcfbfc5262
--- /dev/null
+++ b/REORG.TODO/stdlib/monetary.h
@@ -0,0 +1,58 @@
+/* Header file for monetary value formatting functions.
+   Copyright (C) 1996-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef	_MONETARY_H
+#define	_MONETARY_H	1
+
+#include <features.h>
+
+/* Get needed types.  */
+#define __need_size_t
+#include <stddef.h>
+#include <bits/types.h>
+
+#ifndef	__ssize_t_defined
+typedef __ssize_t ssize_t;
+# define __ssize_t_defined
+#endif
+
+
+__BEGIN_DECLS
+
+/* Formatting a monetary value according to the current locale.  */
+extern ssize_t strfmon (char *__restrict __s, size_t __maxsize,
+			const char *__restrict __format, ...)
+     __THROW __attribute_format_strfmon__ (3, 4);
+
+#ifdef __USE_XOPEN2K8
+# include <xlocale.h>
+
+/* Formatting a monetary value according to the given locale.  */
+extern ssize_t strfmon_l (char *__restrict __s, size_t __maxsize,
+			  __locale_t __loc,
+			  const char *__restrict __format, ...)
+     __THROW __attribute_format_strfmon__ (4, 5);
+#endif
+
+#ifdef __LDBL_COMPAT
+# include <bits/monetary-ldbl.h>
+#endif
+
+__END_DECLS
+
+#endif	/* monetary.h */
diff --git a/REORG.TODO/stdlib/mp_clz_tab.c b/REORG.TODO/stdlib/mp_clz_tab.c
new file mode 100644
index 0000000000..7759ce3abb
--- /dev/null
+++ b/REORG.TODO/stdlib/mp_clz_tab.c
@@ -0,0 +1,36 @@
+/* __clz_tab -- support for longlong.h
+   Copyright (C) 1991-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.  Its master source is NOT part of
+   the C library, however.  The master source lives in the GNU MP Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#if 0
+#include <gmp.h>
+#include "gmp-impl.h"
+#endif
+
+const
+unsigned char __clz_tab[] =
+{
+  0,1,2,2,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+  6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
+  7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
+  7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
+  8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
+  8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
+  8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
+  8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
+};
diff --git a/REORG.TODO/stdlib/mpn2dbl.c b/REORG.TODO/stdlib/mpn2dbl.c
new file mode 100644
index 0000000000..0196e50cad
--- /dev/null
+++ b/REORG.TODO/stdlib/mpn2dbl.c
@@ -0,0 +1,29 @@
+/* Copyright (C) 1995-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <gmp.h>
+#include "gmp-impl.h"
+#include <float.h>
+
+/* Convert a multi-precision integer of the needed number of bits and an
+   integral power of two to a `double'.  */
+
+double
+__mpn_construct_double (mp_srcptr frac_ptr, int expt, int negative)
+{
+#error "__mpn_construct_double not implemented for this floating point format"
+}
diff --git a/REORG.TODO/stdlib/mpn2flt.c b/REORG.TODO/stdlib/mpn2flt.c
new file mode 100644
index 0000000000..62a208d6c7
--- /dev/null
+++ b/REORG.TODO/stdlib/mpn2flt.c
@@ -0,0 +1,29 @@
+/* Copyright (C) 1995-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include "gmp.h"
+#include "gmp-impl.h"
+#include <float.h>
+
+/* Convert a multi-precision integer of the needed number of bits and an
+   integral power of two to a `float'.  */
+
+float
+__mpn_construct_float (mp_srcptr frac_ptr, int expt, int negative)
+{
+#error "__mpn_construct_float not implemented for this floating point format"
+}
diff --git a/REORG.TODO/stdlib/mpn2ldbl.c b/REORG.TODO/stdlib/mpn2ldbl.c
new file mode 100644
index 0000000000..450f9381cc
--- /dev/null
+++ b/REORG.TODO/stdlib/mpn2ldbl.c
@@ -0,0 +1 @@
+/* Empty.  Not needed unless ldbl support is in. */
diff --git a/REORG.TODO/stdlib/mrand48.c b/REORG.TODO/stdlib/mrand48.c
new file mode 100644
index 0000000000..cbc8aaf786
--- /dev/null
+++ b/REORG.TODO/stdlib/mrand48.c
@@ -0,0 +1,30 @@
+/* Copyright (C) 1995-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <stdlib.h>
+
+
+long int
+mrand48 (void)
+{
+  long int result;
+
+  (void) __jrand48_r (__libc_drand48_data.__x, &__libc_drand48_data, &result);
+
+  return result;
+}
diff --git a/REORG.TODO/stdlib/mrand48_r.c b/REORG.TODO/stdlib/mrand48_r.c
new file mode 100644
index 0000000000..a674b5b26d
--- /dev/null
+++ b/REORG.TODO/stdlib/mrand48_r.c
@@ -0,0 +1,29 @@
+/* Copyright (C) 1995-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <stdlib.h>
+
+int
+mrand48_r (struct drand48_data *buffer, long int *result)
+{
+  /* Be generous for the arguments, detect some errors.  */
+  if (buffer == NULL)
+   return -1;
+
+  return __jrand48_r (buffer->__x, buffer, result);
+}
diff --git a/REORG.TODO/stdlib/msort.c b/REORG.TODO/stdlib/msort.c
new file mode 100644
index 0000000000..c00f389601
--- /dev/null
+++ b/REORG.TODO/stdlib/msort.c
@@ -0,0 +1,310 @@
+/* An alternative to qsort, with an identical interface.
+   This file is part of the GNU C Library.
+   Copyright (C) 1992-2017 Free Software Foundation, Inc.
+   Written by Mike Haertel, September 1988.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <alloca.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <memcopy.h>
+#include <errno.h>
+#include <atomic.h>
+
+struct msort_param
+{
+  size_t s;
+  size_t var;
+  __compar_d_fn_t cmp;
+  void *arg;
+  char *t;
+};
+static void msort_with_tmp (const struct msort_param *p, void *b, size_t n);
+
+static void
+msort_with_tmp (const struct msort_param *p, void *b, size_t n)
+{
+  char *b1, *b2;
+  size_t n1, n2;
+
+  if (n <= 1)
+    return;
+
+  n1 = n / 2;
+  n2 = n - n1;
+  b1 = b;
+  b2 = (char *) b + (n1 * p->s);
+
+  msort_with_tmp (p, b1, n1);
+  msort_with_tmp (p, b2, n2);
+
+  char *tmp = p->t;
+  const size_t s = p->s;
+  __compar_d_fn_t cmp = p->cmp;
+  void *arg = p->arg;
+  switch (p->var)
+    {
+    case 0:
+      while (n1 > 0 && n2 > 0)
+	{
+	  if ((*cmp) (b1, b2, arg) <= 0)
+	    {
+	      *(uint32_t *) tmp = *(uint32_t *) b1;
+	      b1 += sizeof (uint32_t);
+	      --n1;
+	    }
+	  else
+	    {
+	      *(uint32_t *) tmp = *(uint32_t *) b2;
+	      b2 += sizeof (uint32_t);
+	      --n2;
+	    }
+	  tmp += sizeof (uint32_t);
+	}
+      break;
+    case 1:
+      while (n1 > 0 && n2 > 0)
+	{
+	  if ((*cmp) (b1, b2, arg) <= 0)
+	    {
+	      *(uint64_t *) tmp = *(uint64_t *) b1;
+	      b1 += sizeof (uint64_t);
+	      --n1;
+	    }
+	  else
+	    {
+	      *(uint64_t *) tmp = *(uint64_t *) b2;
+	      b2 += sizeof (uint64_t);
+	      --n2;
+	    }
+	  tmp += sizeof (uint64_t);
+	}
+      break;
+    case 2:
+      while (n1 > 0 && n2 > 0)
+	{
+	  unsigned long *tmpl = (unsigned long *) tmp;
+	  unsigned long *bl;
+
+	  tmp += s;
+	  if ((*cmp) (b1, b2, arg) <= 0)
+	    {
+	      bl = (unsigned long *) b1;
+	      b1 += s;
+	      --n1;
+	    }
+	  else
+	    {
+	      bl = (unsigned long *) b2;
+	      b2 += s;
+	      --n2;
+	    }
+	  while (tmpl < (unsigned long *) tmp)
+	    *tmpl++ = *bl++;
+	}
+      break;
+    case 3:
+      while (n1 > 0 && n2 > 0)
+	{
+	  if ((*cmp) (*(const void **) b1, *(const void **) b2, arg) <= 0)
+	    {
+	      *(void **) tmp = *(void **) b1;
+	      b1 += sizeof (void *);
+	      --n1;
+	    }
+	  else
+	    {
+	      *(void **) tmp = *(void **) b2;
+	      b2 += sizeof (void *);
+	      --n2;
+	    }
+	  tmp += sizeof (void *);
+	}
+      break;
+    default:
+      while (n1 > 0 && n2 > 0)
+	{
+	  if ((*cmp) (b1, b2, arg) <= 0)
+	    {
+	      tmp = (char *) __mempcpy (tmp, b1, s);
+	      b1 += s;
+	      --n1;
+	    }
+	  else
+	    {
+	      tmp = (char *) __mempcpy (tmp, b2, s);
+	      b2 += s;
+	      --n2;
+	    }
+	}
+      break;
+    }
+
+  if (n1 > 0)
+    memcpy (tmp, b1, n1 * s);
+  memcpy (b, p->t, (n - n2) * s);
+}
+
+
+void
+__qsort_r (void *b, size_t n, size_t s, __compar_d_fn_t cmp, void *arg)
+{
+  size_t size = n * s;
+  char *tmp = NULL;
+  struct msort_param p;
+
+  /* For large object sizes use indirect sorting.  */
+  if (s > 32)
+    size = 2 * n * sizeof (void *) + s;
+
+  if (size < 1024)
+    /* The temporary array is small, so put it on the stack.  */
+    p.t = __alloca (size);
+  else
+    {
+      /* We should avoid allocating too much memory since this might
+	 have to be backed up by swap space.  */
+      static long int phys_pages;
+      static int pagesize;
+
+      if (pagesize == 0)
+	{
+	  phys_pages = __sysconf (_SC_PHYS_PAGES);
+
+	  if (phys_pages == -1)
+	    /* Error while determining the memory size.  So let's
+	       assume there is enough memory.  Otherwise the
+	       implementer should provide a complete implementation of
+	       the `sysconf' function.  */
+	    phys_pages = (long int) (~0ul >> 1);
+
+	  /* The following determines that we will never use more than
+	     a quarter of the physical memory.  */
+	  phys_pages /= 4;
+
+	  /* Make sure phys_pages is written to memory.  */
+	  atomic_write_barrier ();
+
+	  pagesize = __sysconf (_SC_PAGESIZE);
+	}
+
+      /* Just a comment here.  We cannot compute
+	   phys_pages * pagesize
+	   and compare the needed amount of memory against this value.
+	   The problem is that some systems might have more physical
+	   memory then can be represented with a `size_t' value (when
+	   measured in bytes.  */
+
+      /* If the memory requirements are too high don't allocate memory.  */
+      if (size / pagesize > (size_t) phys_pages)
+	{
+	  _quicksort (b, n, s, cmp, arg);
+	  return;
+	}
+
+      /* It's somewhat large, so malloc it.  */
+      int save = errno;
+      tmp = malloc (size);
+      __set_errno (save);
+      if (tmp == NULL)
+	{
+	  /* Couldn't get space, so use the slower algorithm
+	     that doesn't need a temporary array.  */
+	  _quicksort (b, n, s, cmp, arg);
+	  return;
+	}
+      p.t = tmp;
+    }
+
+  p.s = s;
+  p.var = 4;
+  p.cmp = cmp;
+  p.arg = arg;
+
+  if (s > 32)
+    {
+      /* Indirect sorting.  */
+      char *ip = (char *) b;
+      void **tp = (void **) (p.t + n * sizeof (void *));
+      void **t = tp;
+      void *tmp_storage = (void *) (tp + n);
+
+      while ((void *) t < tmp_storage)
+	{
+	  *t++ = ip;
+	  ip += s;
+	}
+      p.s = sizeof (void *);
+      p.var = 3;
+      msort_with_tmp (&p, p.t + n * sizeof (void *), n);
+
+      /* tp[0] .. tp[n - 1] is now sorted, copy around entries of
+	 the original array.  Knuth vol. 3 (2nd ed.) exercise 5.2-10.  */
+      char *kp;
+      size_t i;
+      for (i = 0, ip = (char *) b; i < n; i++, ip += s)
+	if ((kp = tp[i]) != ip)
+	  {
+	    size_t j = i;
+	    char *jp = ip;
+	    memcpy (tmp_storage, ip, s);
+
+	    do
+	      {
+		size_t k = (kp - (char *) b) / s;
+		tp[j] = jp;
+		memcpy (jp, kp, s);
+		j = k;
+		jp = kp;
+		kp = tp[k];
+	      }
+	    while (kp != ip);
+
+	    tp[j] = jp;
+	    memcpy (jp, tmp_storage, s);
+	  }
+    }
+  else
+    {
+      if ((s & (sizeof (uint32_t) - 1)) == 0
+	  && ((char *) b - (char *) 0) % __alignof__ (uint32_t) == 0)
+	{
+	  if (s == sizeof (uint32_t))
+	    p.var = 0;
+	  else if (s == sizeof (uint64_t)
+		   && ((char *) b - (char *) 0) % __alignof__ (uint64_t) == 0)
+	    p.var = 1;
+	  else if ((s & (sizeof (unsigned long) - 1)) == 0
+		   && ((char *) b - (char *) 0)
+		      % __alignof__ (unsigned long) == 0)
+	    p.var = 2;
+	}
+      msort_with_tmp (&p, b, n);
+    }
+  free (tmp);
+}
+libc_hidden_def (__qsort_r)
+weak_alias (__qsort_r, qsort_r)
+
+
+void
+qsort (void *b, size_t n, size_t s, __compar_fn_t cmp)
+{
+  return __qsort_r (b, n, s, (__compar_d_fn_t) cmp, NULL);
+}
+libc_hidden_def (qsort)
diff --git a/REORG.TODO/stdlib/mul.c b/REORG.TODO/stdlib/mul.c
new file mode 100644
index 0000000000..88ba1c5176
--- /dev/null
+++ b/REORG.TODO/stdlib/mul.c
@@ -0,0 +1,142 @@
+/* mpn_mul -- Multiply two natural numbers.
+
+Copyright (C) 1991-2017 Free Software Foundation, Inc.
+
+This file is part of the GNU MP Library.
+
+The GNU MP Library is free software; you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation; either version 2.1 of the License, or (at your
+option) any later version.
+
+The GNU MP 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 Lesser General Public
+License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with the GNU MP Library; see the file COPYING.LIB.  If not, see
+<http://www.gnu.org/licenses/>.  */
+
+#include <gmp.h>
+#include "gmp-impl.h"
+
+/* Multiply the natural numbers u (pointed to by UP, with USIZE limbs)
+   and v (pointed to by VP, with VSIZE limbs), and store the result at
+   PRODP.  USIZE + VSIZE limbs are always stored, but if the input
+   operands are normalized.  Return the most significant limb of the
+   result.
+
+   NOTE: The space pointed to by PRODP is overwritten before finished
+   with U and V, so overlap is an error.
+
+   Argument constraints:
+   1. USIZE >= VSIZE.
+   2. PRODP != UP and PRODP != VP, i.e. the destination
+      must be distinct from the multiplier and the multiplicand.  */
+
+/* If KARATSUBA_THRESHOLD is not already defined, define it to a
+   value which is good on most machines.  */
+#ifndef KARATSUBA_THRESHOLD
+#define KARATSUBA_THRESHOLD 32
+#endif
+
+mp_limb_t
+mpn_mul (mp_ptr prodp,
+	 mp_srcptr up, mp_size_t usize,
+	 mp_srcptr vp, mp_size_t vsize)
+{
+  mp_ptr prod_endp = prodp + usize + vsize - 1;
+  mp_limb_t cy;
+  mp_ptr tspace;
+  TMP_DECL (marker);
+
+  if (vsize < KARATSUBA_THRESHOLD)
+    {
+      /* Handle simple cases with traditional multiplication.
+
+	 This is the most critical code of the entire function.  All
+	 multiplies rely on this, both small and huge.  Small ones arrive
+	 here immediately.  Huge ones arrive here as this is the base case
+	 for Karatsuba's recursive algorithm below.  */
+      mp_size_t i;
+      mp_limb_t cy_limb;
+      mp_limb_t v_limb;
+
+      if (vsize == 0)
+	return 0;
+
+      /* Multiply by the first limb in V separately, as the result can be
+	 stored (not added) to PROD.  We also avoid a loop for zeroing.  */
+      v_limb = vp[0];
+      if (v_limb <= 1)
+	{
+	  if (v_limb == 1)
+	    MPN_COPY (prodp, up, usize);
+	  else
+	    MPN_ZERO (prodp, usize);
+	  cy_limb = 0;
+	}
+      else
+	cy_limb = mpn_mul_1 (prodp, up, usize, v_limb);
+
+      prodp[usize] = cy_limb;
+      prodp++;
+
+      /* For each iteration in the outer loop, multiply one limb from
+	 U with one limb from V, and add it to PROD.  */
+      for (i = 1; i < vsize; i++)
+	{
+	  v_limb = vp[i];
+	  if (v_limb <= 1)
+	    {
+	      cy_limb = 0;
+	      if (v_limb == 1)
+		cy_limb = mpn_add_n (prodp, prodp, up, usize);
+	    }
+	  else
+	    cy_limb = mpn_addmul_1 (prodp, up, usize, v_limb);
+
+	  prodp[usize] = cy_limb;
+	  prodp++;
+	}
+      return cy_limb;
+    }
+
+  TMP_MARK (marker);
+
+  tspace = (mp_ptr) TMP_ALLOC (2 * vsize * BYTES_PER_MP_LIMB);
+  MPN_MUL_N_RECURSE (prodp, up, vp, vsize, tspace);
+
+  prodp += vsize;
+  up += vsize;
+  usize -= vsize;
+  if (usize >= vsize)
+    {
+      mp_ptr tp = (mp_ptr) TMP_ALLOC (2 * vsize * BYTES_PER_MP_LIMB);
+      do
+	{
+	  MPN_MUL_N_RECURSE (tp, up, vp, vsize, tspace);
+	  cy = mpn_add_n (prodp, prodp, tp, vsize);
+	  mpn_add_1 (prodp + vsize, tp + vsize, vsize, cy);
+	  prodp += vsize;
+	  up += vsize;
+	  usize -= vsize;
+	}
+      while (usize >= vsize);
+    }
+
+  /* True: usize < vsize.  */
+
+  /* Make life simple: Recurse.  */
+
+  if (usize != 0)
+    {
+      mpn_mul (tspace, vp, vsize, up, usize);
+      cy = mpn_add_n (prodp, prodp, tspace, vsize);
+      mpn_add_1 (prodp + vsize, tspace + vsize, usize, cy);
+    }
+
+  TMP_FREE (marker);
+  return *prod_endp;
+}
diff --git a/REORG.TODO/stdlib/mul_1.c b/REORG.TODO/stdlib/mul_1.c
new file mode 100644
index 0000000000..2c590d2741
--- /dev/null
+++ b/REORG.TODO/stdlib/mul_1.c
@@ -0,0 +1,55 @@
+/* mpn_mul_1 -- Multiply a limb vector with a single limb and
+   store the product in a second limb vector.
+
+Copyright (C) 1991-2017 Free Software Foundation, Inc.
+
+This file is part of the GNU MP Library.
+
+The GNU MP Library is free software; you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation; either version 2.1 of the License, or (at your
+option) any later version.
+
+The GNU MP 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 Lesser General Public
+License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with the GNU MP Library; see the file COPYING.LIB.  If not, see
+<http://www.gnu.org/licenses/>.  */
+
+#include <gmp.h>
+#include "gmp-impl.h"
+#include "longlong.h"
+
+mp_limb_t
+mpn_mul_1 (register mp_ptr res_ptr, register mp_srcptr s1_ptr,
+	   mp_size_t s1_size, register mp_limb_t s2_limb)
+{
+  register mp_limb_t cy_limb;
+  register mp_size_t j;
+  register mp_limb_t prod_high, prod_low;
+
+  /* The loop counter and index J goes from -S1_SIZE to -1.  This way
+     the loop becomes faster.  */
+  j = -s1_size;
+
+  /* Offset the base pointers to compensate for the negative indices.  */
+  s1_ptr -= j;
+  res_ptr -= j;
+
+  cy_limb = 0;
+  do
+    {
+      umul_ppmm (prod_high, prod_low, s1_ptr[j], s2_limb);
+
+      prod_low += cy_limb;
+      cy_limb = (prod_low < cy_limb) + prod_high;
+
+      res_ptr[j] = prod_low;
+    }
+  while (++j != 0);
+
+  return cy_limb;
+}
diff --git a/REORG.TODO/stdlib/mul_n.c b/REORG.TODO/stdlib/mul_n.c
new file mode 100644
index 0000000000..cf243242cc
--- /dev/null
+++ b/REORG.TODO/stdlib/mul_n.c
@@ -0,0 +1,360 @@
+/* mpn_mul_n -- Multiply two natural numbers of length n.
+
+Copyright (C) 1991-2017 Free Software Foundation, Inc.
+
+This file is part of the GNU MP Library.
+
+The GNU MP Library is free software; you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation; either version 2.1 of the License, or (at your
+option) any later version.
+
+The GNU MP 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 Lesser General Public
+License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with the GNU MP Library; see the file COPYING.LIB.  If not, see
+<http://www.gnu.org/licenses/>.  */
+
+#include <gmp.h>
+#include "gmp-impl.h"
+
+/* Multiply the natural numbers u (pointed to by UP) and v (pointed to by VP),
+   both with SIZE limbs, and store the result at PRODP.  2 * SIZE limbs are
+   always stored.  Return the most significant limb.
+
+   Argument constraints:
+   1. PRODP != UP and PRODP != VP, i.e. the destination
+      must be distinct from the multiplier and the multiplicand.  */
+
+/* If KARATSUBA_THRESHOLD is not already defined, define it to a
+   value which is good on most machines.  */
+#ifndef KARATSUBA_THRESHOLD
+#define KARATSUBA_THRESHOLD 32
+#endif
+
+/* The code can't handle KARATSUBA_THRESHOLD smaller than 2.  */
+#if KARATSUBA_THRESHOLD < 2
+#undef KARATSUBA_THRESHOLD
+#define KARATSUBA_THRESHOLD 2
+#endif
+
+/* Handle simple cases with traditional multiplication.
+
+   This is the most critical code of multiplication.  All multiplies rely
+   on this, both small and huge.  Small ones arrive here immediately.  Huge
+   ones arrive here as this is the base case for Karatsuba's recursive
+   algorithm below.  */
+
+void
+impn_mul_n_basecase (mp_ptr prodp, mp_srcptr up, mp_srcptr vp, mp_size_t size)
+{
+  mp_size_t i;
+  mp_limb_t cy_limb;
+  mp_limb_t v_limb;
+
+  /* Multiply by the first limb in V separately, as the result can be
+     stored (not added) to PROD.  We also avoid a loop for zeroing.  */
+  v_limb = vp[0];
+  if (v_limb <= 1)
+    {
+      if (v_limb == 1)
+	MPN_COPY (prodp, up, size);
+      else
+	MPN_ZERO (prodp, size);
+      cy_limb = 0;
+    }
+  else
+    cy_limb = mpn_mul_1 (prodp, up, size, v_limb);
+
+  prodp[size] = cy_limb;
+  prodp++;
+
+  /* For each iteration in the outer loop, multiply one limb from
+     U with one limb from V, and add it to PROD.  */
+  for (i = 1; i < size; i++)
+    {
+      v_limb = vp[i];
+      if (v_limb <= 1)
+	{
+	  cy_limb = 0;
+	  if (v_limb == 1)
+	    cy_limb = mpn_add_n (prodp, prodp, up, size);
+	}
+      else
+	cy_limb = mpn_addmul_1 (prodp, up, size, v_limb);
+
+      prodp[size] = cy_limb;
+      prodp++;
+    }
+}
+
+void
+impn_mul_n (mp_ptr prodp,
+	     mp_srcptr up, mp_srcptr vp, mp_size_t size, mp_ptr tspace)
+{
+  if ((size & 1) != 0)
+    {
+      /* The size is odd, the code code below doesn't handle that.
+	 Multiply the least significant (size - 1) limbs with a recursive
+	 call, and handle the most significant limb of S1 and S2
+	 separately.  */
+      /* A slightly faster way to do this would be to make the Karatsuba
+	 code below behave as if the size were even, and let it check for
+	 odd size in the end.  I.e., in essence move this code to the end.
+	 Doing so would save us a recursive call, and potentially make the
+	 stack grow a lot less.  */
+
+      mp_size_t esize = size - 1;	/* even size */
+      mp_limb_t cy_limb;
+
+      MPN_MUL_N_RECURSE (prodp, up, vp, esize, tspace);
+      cy_limb = mpn_addmul_1 (prodp + esize, up, esize, vp[esize]);
+      prodp[esize + esize] = cy_limb;
+      cy_limb = mpn_addmul_1 (prodp + esize, vp, size, up[esize]);
+
+      prodp[esize + size] = cy_limb;
+    }
+  else
+    {
+      /* Anatolij Alekseevich Karatsuba's divide-and-conquer algorithm.
+
+	 Split U in two pieces, U1 and U0, such that
+	 U = U0 + U1*(B**n),
+	 and V in V1 and V0, such that
+	 V = V0 + V1*(B**n).
+
+	 UV is then computed recursively using the identity
+
+		2n   n          n                     n
+	 UV = (B  + B )U V  +  B (U -U )(V -V )  +  (B + 1)U V
+			1 1        1  0   0  1              0 0
+
+	 Where B = 2**BITS_PER_MP_LIMB.  */
+
+      mp_size_t hsize = size >> 1;
+      mp_limb_t cy;
+      int negflg;
+
+      /*** Product H.	 ________________  ________________
+			|_____U1 x V1____||____U0 x V0_____|  */
+      /* Put result in upper part of PROD and pass low part of TSPACE
+	 as new TSPACE.  */
+      MPN_MUL_N_RECURSE (prodp + size, up + hsize, vp + hsize, hsize, tspace);
+
+      /*** Product M.	 ________________
+			|_(U1-U0)(V0-V1)_|  */
+      if (mpn_cmp (up + hsize, up, hsize) >= 0)
+	{
+	  mpn_sub_n (prodp, up + hsize, up, hsize);
+	  negflg = 0;
+	}
+      else
+	{
+	  mpn_sub_n (prodp, up, up + hsize, hsize);
+	  negflg = 1;
+	}
+      if (mpn_cmp (vp + hsize, vp, hsize) >= 0)
+	{
+	  mpn_sub_n (prodp + hsize, vp + hsize, vp, hsize);
+	  negflg ^= 1;
+	}
+      else
+	{
+	  mpn_sub_n (prodp + hsize, vp, vp + hsize, hsize);
+	  /* No change of NEGFLG.  */
+	}
+      /* Read temporary operands from low part of PROD.
+	 Put result in low part of TSPACE using upper part of TSPACE
+	 as new TSPACE.  */
+      MPN_MUL_N_RECURSE (tspace, prodp, prodp + hsize, hsize, tspace + size);
+
+      /*** Add/copy product H.  */
+      MPN_COPY (prodp + hsize, prodp + size, hsize);
+      cy = mpn_add_n (prodp + size, prodp + size, prodp + size + hsize, hsize);
+
+      /*** Add product M (if NEGFLG M is a negative number).  */
+      if (negflg)
+	cy -= mpn_sub_n (prodp + hsize, prodp + hsize, tspace, size);
+      else
+	cy += mpn_add_n (prodp + hsize, prodp + hsize, tspace, size);
+
+      /*** Product L.	 ________________  ________________
+			|________________||____U0 x V0_____|  */
+      /* Read temporary operands from low part of PROD.
+	 Put result in low part of TSPACE using upper part of TSPACE
+	 as new TSPACE.  */
+      MPN_MUL_N_RECURSE (tspace, up, vp, hsize, tspace + size);
+
+      /*** Add/copy Product L (twice).  */
+
+      cy += mpn_add_n (prodp + hsize, prodp + hsize, tspace, size);
+      if (cy)
+	mpn_add_1 (prodp + hsize + size, prodp + hsize + size, hsize, cy);
+
+      MPN_COPY (prodp, tspace, hsize);
+      cy = mpn_add_n (prodp + hsize, prodp + hsize, tspace + hsize, hsize);
+      if (cy)
+	mpn_add_1 (prodp + size, prodp + size, size, 1);
+    }
+}
+
+void
+impn_sqr_n_basecase (mp_ptr prodp, mp_srcptr up, mp_size_t size)
+{
+  mp_size_t i;
+  mp_limb_t cy_limb;
+  mp_limb_t v_limb;
+
+  /* Multiply by the first limb in V separately, as the result can be
+     stored (not added) to PROD.  We also avoid a loop for zeroing.  */
+  v_limb = up[0];
+  if (v_limb <= 1)
+    {
+      if (v_limb == 1)
+	MPN_COPY (prodp, up, size);
+      else
+	MPN_ZERO (prodp, size);
+      cy_limb = 0;
+    }
+  else
+    cy_limb = mpn_mul_1 (prodp, up, size, v_limb);
+
+  prodp[size] = cy_limb;
+  prodp++;
+
+  /* For each iteration in the outer loop, multiply one limb from
+     U with one limb from V, and add it to PROD.  */
+  for (i = 1; i < size; i++)
+    {
+      v_limb = up[i];
+      if (v_limb <= 1)
+	{
+	  cy_limb = 0;
+	  if (v_limb == 1)
+	    cy_limb = mpn_add_n (prodp, prodp, up, size);
+	}
+      else
+	cy_limb = mpn_addmul_1 (prodp, up, size, v_limb);
+
+      prodp[size] = cy_limb;
+      prodp++;
+    }
+}
+
+void
+impn_sqr_n (mp_ptr prodp,
+	     mp_srcptr up, mp_size_t size, mp_ptr tspace)
+{
+  if ((size & 1) != 0)
+    {
+      /* The size is odd, the code code below doesn't handle that.
+	 Multiply the least significant (size - 1) limbs with a recursive
+	 call, and handle the most significant limb of S1 and S2
+	 separately.  */
+      /* A slightly faster way to do this would be to make the Karatsuba
+	 code below behave as if the size were even, and let it check for
+	 odd size in the end.  I.e., in essence move this code to the end.
+	 Doing so would save us a recursive call, and potentially make the
+	 stack grow a lot less.  */
+
+      mp_size_t esize = size - 1;	/* even size */
+      mp_limb_t cy_limb;
+
+      MPN_SQR_N_RECURSE (prodp, up, esize, tspace);
+      cy_limb = mpn_addmul_1 (prodp + esize, up, esize, up[esize]);
+      prodp[esize + esize] = cy_limb;
+      cy_limb = mpn_addmul_1 (prodp + esize, up, size, up[esize]);
+
+      prodp[esize + size] = cy_limb;
+    }
+  else
+    {
+      mp_size_t hsize = size >> 1;
+      mp_limb_t cy;
+
+      /*** Product H.	 ________________  ________________
+			|_____U1 x U1____||____U0 x U0_____|  */
+      /* Put result in upper part of PROD and pass low part of TSPACE
+	 as new TSPACE.  */
+      MPN_SQR_N_RECURSE (prodp + size, up + hsize, hsize, tspace);
+
+      /*** Product M.	 ________________
+			|_(U1-U0)(U0-U1)_|  */
+      if (mpn_cmp (up + hsize, up, hsize) >= 0)
+	{
+	  mpn_sub_n (prodp, up + hsize, up, hsize);
+	}
+      else
+	{
+	  mpn_sub_n (prodp, up, up + hsize, hsize);
+	}
+
+      /* Read temporary operands from low part of PROD.
+	 Put result in low part of TSPACE using upper part of TSPACE
+	 as new TSPACE.  */
+      MPN_SQR_N_RECURSE (tspace, prodp, hsize, tspace + size);
+
+      /*** Add/copy product H.  */
+      MPN_COPY (prodp + hsize, prodp + size, hsize);
+      cy = mpn_add_n (prodp + size, prodp + size, prodp + size + hsize, hsize);
+
+      /*** Add product M (if NEGFLG M is a negative number).  */
+      cy -= mpn_sub_n (prodp + hsize, prodp + hsize, tspace, size);
+
+      /*** Product L.	 ________________  ________________
+			|________________||____U0 x U0_____|  */
+      /* Read temporary operands from low part of PROD.
+	 Put result in low part of TSPACE using upper part of TSPACE
+	 as new TSPACE.  */
+      MPN_SQR_N_RECURSE (tspace, up, hsize, tspace + size);
+
+      /*** Add/copy Product L (twice).  */
+
+      cy += mpn_add_n (prodp + hsize, prodp + hsize, tspace, size);
+      if (cy)
+	mpn_add_1 (prodp + hsize + size, prodp + hsize + size, hsize, cy);
+
+      MPN_COPY (prodp, tspace, hsize);
+      cy = mpn_add_n (prodp + hsize, prodp + hsize, tspace + hsize, hsize);
+      if (cy)
+	mpn_add_1 (prodp + size, prodp + size, size, 1);
+    }
+}
+
+/* This should be made into an inline function in gmp.h.  */
+void
+mpn_mul_n (mp_ptr prodp, mp_srcptr up, mp_srcptr vp, mp_size_t size)
+{
+  TMP_DECL (marker);
+  TMP_MARK (marker);
+  if (up == vp)
+    {
+      if (size < KARATSUBA_THRESHOLD)
+	{
+	  impn_sqr_n_basecase (prodp, up, size);
+	}
+      else
+	{
+	  mp_ptr tspace;
+	  tspace = (mp_ptr) TMP_ALLOC (2 * size * BYTES_PER_MP_LIMB);
+	  impn_sqr_n (prodp, up, size, tspace);
+	}
+    }
+  else
+    {
+      if (size < KARATSUBA_THRESHOLD)
+	{
+	  impn_mul_n_basecase (prodp, up, vp, size);
+	}
+      else
+	{
+	  mp_ptr tspace;
+	  tspace = (mp_ptr) TMP_ALLOC (2 * size * BYTES_PER_MP_LIMB);
+	  impn_mul_n (prodp, up, vp, size, tspace);
+	}
+    }
+  TMP_FREE (marker);
+}
diff --git a/REORG.TODO/stdlib/nrand48.c b/REORG.TODO/stdlib/nrand48.c
new file mode 100644
index 0000000000..9fdc62ff5f
--- /dev/null
+++ b/REORG.TODO/stdlib/nrand48.c
@@ -0,0 +1,30 @@
+/* Copyright (C) 1995-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <stdlib.h>
+
+
+long int
+nrand48 (unsigned short int xsubi[3])
+{
+  long int result;
+
+  (void) __nrand48_r (xsubi, &__libc_drand48_data, &result);
+
+  return result;
+}
diff --git a/REORG.TODO/stdlib/nrand48_r.c b/REORG.TODO/stdlib/nrand48_r.c
new file mode 100644
index 0000000000..e6f385d907
--- /dev/null
+++ b/REORG.TODO/stdlib/nrand48_r.c
@@ -0,0 +1,37 @@
+/* Copyright (C) 1995-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <stdlib.h>
+
+int
+__nrand48_r (unsigned short int xsubi[3], struct drand48_data *buffer,
+	     long int *result)
+{
+  /* Compute next state.  */
+  if (__drand48_iterate (xsubi, buffer) < 0)
+    return -1;
+
+  /* Store the result.  */
+  if (sizeof (unsigned short int) == 2)
+    *result = xsubi[2] << 15 | xsubi[1] >> 1;
+  else
+    *result = xsubi[2] >> 1;
+
+  return 0;
+}
+weak_alias (__nrand48_r, nrand48_r)
diff --git a/REORG.TODO/stdlib/old_atexit.c b/REORG.TODO/stdlib/old_atexit.c
new file mode 100644
index 0000000000..44bbd699bd
--- /dev/null
+++ b/REORG.TODO/stdlib/old_atexit.c
@@ -0,0 +1,8 @@
+#include <shlib-compat.h>
+
+#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_2_2)
+# define atexit attribute_compat_text_section __dyn_atexit
+# include "atexit.c"
+# undef atexit
+compat_symbol (libc, __dyn_atexit, atexit, GLIBC_2_0);
+#endif
diff --git a/REORG.TODO/stdlib/on_exit.c b/REORG.TODO/stdlib/on_exit.c
new file mode 100644
index 0000000000..83845e76d8
--- /dev/null
+++ b/REORG.TODO/stdlib/on_exit.c
@@ -0,0 +1,41 @@
+/* Copyright (C) 1991-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <stdlib.h>
+#include "exit.h"
+#include <atomic.h>
+#include <sysdep.h>
+
+/* Register a function to be called by exit.  */
+int
+__on_exit (void (*func) (int status, void *arg), void *arg)
+{
+  struct exit_function *new = __new_exitfn (&__exit_funcs);
+
+  if (new == NULL)
+    return -1;
+
+#ifdef PTR_MANGLE
+  PTR_MANGLE (func);
+#endif
+  new->func.on.fn = func;
+  new->func.on.arg = arg;
+  atomic_write_barrier ();
+  new->flavor = ef_on;
+  return 0;
+}
+weak_alias (__on_exit, on_exit)
diff --git a/REORG.TODO/stdlib/putenv.c b/REORG.TODO/stdlib/putenv.c
new file mode 100644
index 0000000000..c0488fc505
--- /dev/null
+++ b/REORG.TODO/stdlib/putenv.c
@@ -0,0 +1,87 @@
+/* Copyright (C) 1991-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#if defined _AIX && !defined __GNUC__
+ #pragma alloca
+#endif
+
+#if HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#if _LIBC || HAVE_STDLIB_H
+# include <stdlib.h>
+#endif
+#if _LIBC || HAVE_STRING_H
+# include <string.h>
+#endif
+
+#if !__GNU_LIBRARY__ && !HAVE_STRCHR
+# define strchr index
+#endif
+
+#ifndef _LIBC
+# ifdef HAVE_ALLOCA_H
+#  include <alloca.h>
+# else
+#  ifdef __GNUC__
+#   define alloca __builtin_alloca
+#  else
+extern char *alloca ();
+#  endif /* __GNUC__ */
+# endif /* HAVE_ALLOCA_H */
+#endif /* _LIBC */
+
+
+/* Put STRING, which is of the form "NAME=VALUE", in the environment.  */
+int
+putenv (char *string)
+{
+  const char *const name_end = strchr (string, '=');
+
+  if (name_end != NULL)
+    {
+      char *name;
+#ifdef _LIBC
+      int use_malloc = !__libc_use_alloca (name_end - string + 1);
+      if (__builtin_expect (use_malloc, 0))
+	{
+	  name = __strndup (string, name_end - string);
+	  if (name == NULL)
+	    return -1;
+	}
+      else
+	name = strndupa (string, name_end - string);
+#else
+# define use_malloc 1
+      name = malloc (name_end - string + 1);
+      if (name == NULL)
+	return -1;
+      memcpy (name, string, name_end - string);
+      name[name_end - string] = '\0';
+#endif
+      int result = __add_to_environ (name, NULL, string, 1);
+
+      if (__glibc_unlikely (use_malloc))
+	free (name);
+
+      return result;
+    }
+
+  __unsetenv (string);
+  return 0;
+}
diff --git a/REORG.TODO/stdlib/qsort.c b/REORG.TODO/stdlib/qsort.c
new file mode 100644
index 0000000000..9badf33ec0
--- /dev/null
+++ b/REORG.TODO/stdlib/qsort.c
@@ -0,0 +1,249 @@
+/* Copyright (C) 1991-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Written by Douglas C. Schmidt (schmidt@ics.uci.edu).
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* If you consider tuning this algorithm, you should consult first:
+   Engineering a sort function; Jon Bentley and M. Douglas McIlroy;
+   Software - Practice and Experience; Vol. 23 (11), 1249-1265, 1993.  */
+
+#include <alloca.h>
+#include <limits.h>
+#include <stdlib.h>
+#include <string.h>
+
+/* Byte-wise swap two items of size SIZE. */
+#define SWAP(a, b, size)						      \
+  do									      \
+    {									      \
+      size_t __size = (size);						      \
+      char *__a = (a), *__b = (b);					      \
+      do								      \
+	{								      \
+	  char __tmp = *__a;						      \
+	  *__a++ = *__b;						      \
+	  *__b++ = __tmp;						      \
+	} while (--__size > 0);						      \
+    } while (0)
+
+/* Discontinue quicksort algorithm when partition gets below this size.
+   This particular magic number was chosen to work best on a Sun 4/260. */
+#define MAX_THRESH 4
+
+/* Stack node declarations used to store unfulfilled partition obligations. */
+typedef struct
+  {
+    char *lo;
+    char *hi;
+  } stack_node;
+
+/* The next 4 #defines implement a very fast in-line stack abstraction. */
+/* The stack needs log (total_elements) entries (we could even subtract
+   log(MAX_THRESH)).  Since total_elements has type size_t, we get as
+   upper bound for log (total_elements):
+   bits per byte (CHAR_BIT) * sizeof(size_t).  */
+#define STACK_SIZE	(CHAR_BIT * sizeof(size_t))
+#define PUSH(low, high)	((void) ((top->lo = (low)), (top->hi = (high)), ++top))
+#define	POP(low, high)	((void) (--top, (low = top->lo), (high = top->hi)))
+#define	STACK_NOT_EMPTY	(stack < top)
+
+
+/* Order size using quicksort.  This implementation incorporates
+   four optimizations discussed in Sedgewick:
+
+   1. Non-recursive, using an explicit stack of pointer that store the
+      next array partition to sort.  To save time, this maximum amount
+      of space required to store an array of SIZE_MAX is allocated on the
+      stack.  Assuming a 32-bit (64 bit) integer for size_t, this needs
+      only 32 * sizeof(stack_node) == 256 bytes (for 64 bit: 1024 bytes).
+      Pretty cheap, actually.
+
+   2. Chose the pivot element using a median-of-three decision tree.
+      This reduces the probability of selecting a bad pivot value and
+      eliminates certain extraneous comparisons.
+
+   3. Only quicksorts TOTAL_ELEMS / MAX_THRESH partitions, leaving
+      insertion sort to order the MAX_THRESH items within each partition.
+      This is a big win, since insertion sort is faster for small, mostly
+      sorted array segments.
+
+   4. The larger of the two sub-partitions is always pushed onto the
+      stack first, with the algorithm then concentrating on the
+      smaller partition.  This *guarantees* no more than log (total_elems)
+      stack size is needed (actually O(1) in this case)!  */
+
+void
+_quicksort (void *const pbase, size_t total_elems, size_t size,
+	    __compar_d_fn_t cmp, void *arg)
+{
+  char *base_ptr = (char *) pbase;
+
+  const size_t max_thresh = MAX_THRESH * size;
+
+  if (total_elems == 0)
+    /* Avoid lossage with unsigned arithmetic below.  */
+    return;
+
+  if (total_elems > MAX_THRESH)
+    {
+      char *lo = base_ptr;
+      char *hi = &lo[size * (total_elems - 1)];
+      stack_node stack[STACK_SIZE];
+      stack_node *top = stack;
+
+      PUSH (NULL, NULL);
+
+      while (STACK_NOT_EMPTY)
+        {
+          char *left_ptr;
+          char *right_ptr;
+
+	  /* Select median value from among LO, MID, and HI. Rearrange
+	     LO and HI so the three values are sorted. This lowers the
+	     probability of picking a pathological pivot value and
+	     skips a comparison for both the LEFT_PTR and RIGHT_PTR in
+	     the while loops. */
+
+	  char *mid = lo + size * ((hi - lo) / size >> 1);
+
+	  if ((*cmp) ((void *) mid, (void *) lo, arg) < 0)
+	    SWAP (mid, lo, size);
+	  if ((*cmp) ((void *) hi, (void *) mid, arg) < 0)
+	    SWAP (mid, hi, size);
+	  else
+	    goto jump_over;
+	  if ((*cmp) ((void *) mid, (void *) lo, arg) < 0)
+	    SWAP (mid, lo, size);
+	jump_over:;
+
+	  left_ptr  = lo + size;
+	  right_ptr = hi - size;
+
+	  /* Here's the famous ``collapse the walls'' section of quicksort.
+	     Gotta like those tight inner loops!  They are the main reason
+	     that this algorithm runs much faster than others. */
+	  do
+	    {
+	      while ((*cmp) ((void *) left_ptr, (void *) mid, arg) < 0)
+		left_ptr += size;
+
+	      while ((*cmp) ((void *) mid, (void *) right_ptr, arg) < 0)
+		right_ptr -= size;
+
+	      if (left_ptr < right_ptr)
+		{
+		  SWAP (left_ptr, right_ptr, size);
+		  if (mid == left_ptr)
+		    mid = right_ptr;
+		  else if (mid == right_ptr)
+		    mid = left_ptr;
+		  left_ptr += size;
+		  right_ptr -= size;
+		}
+	      else if (left_ptr == right_ptr)
+		{
+		  left_ptr += size;
+		  right_ptr -= size;
+		  break;
+		}
+	    }
+	  while (left_ptr <= right_ptr);
+
+          /* Set up pointers for next iteration.  First determine whether
+             left and right partitions are below the threshold size.  If so,
+             ignore one or both.  Otherwise, push the larger partition's
+             bounds on the stack and continue sorting the smaller one. */
+
+          if ((size_t) (right_ptr - lo) <= max_thresh)
+            {
+              if ((size_t) (hi - left_ptr) <= max_thresh)
+		/* Ignore both small partitions. */
+                POP (lo, hi);
+              else
+		/* Ignore small left partition. */
+                lo = left_ptr;
+            }
+          else if ((size_t) (hi - left_ptr) <= max_thresh)
+	    /* Ignore small right partition. */
+            hi = right_ptr;
+          else if ((right_ptr - lo) > (hi - left_ptr))
+            {
+	      /* Push larger left partition indices. */
+              PUSH (lo, right_ptr);
+              lo = left_ptr;
+            }
+          else
+            {
+	      /* Push larger right partition indices. */
+              PUSH (left_ptr, hi);
+              hi = right_ptr;
+            }
+        }
+    }
+
+  /* Once the BASE_PTR array is partially sorted by quicksort the rest
+     is completely sorted using insertion sort, since this is efficient
+     for partitions below MAX_THRESH size. BASE_PTR points to the beginning
+     of the array to sort, and END_PTR points at the very last element in
+     the array (*not* one beyond it!). */
+
+#define min(x, y) ((x) < (y) ? (x) : (y))
+
+  {
+    char *const end_ptr = &base_ptr[size * (total_elems - 1)];
+    char *tmp_ptr = base_ptr;
+    char *thresh = min(end_ptr, base_ptr + max_thresh);
+    char *run_ptr;
+
+    /* Find smallest element in first threshold and place it at the
+       array's beginning.  This is the smallest array element,
+       and the operation speeds up insertion sort's inner loop. */
+
+    for (run_ptr = tmp_ptr + size; run_ptr <= thresh; run_ptr += size)
+      if ((*cmp) ((void *) run_ptr, (void *) tmp_ptr, arg) < 0)
+        tmp_ptr = run_ptr;
+
+    if (tmp_ptr != base_ptr)
+      SWAP (tmp_ptr, base_ptr, size);
+
+    /* Insertion sort, running from left-hand-side up to right-hand-side.  */
+
+    run_ptr = base_ptr + size;
+    while ((run_ptr += size) <= end_ptr)
+      {
+	tmp_ptr = run_ptr - size;
+	while ((*cmp) ((void *) run_ptr, (void *) tmp_ptr, arg) < 0)
+	  tmp_ptr -= size;
+
+	tmp_ptr += size;
+        if (tmp_ptr != run_ptr)
+          {
+            char *trav;
+
+	    trav = run_ptr + size;
+	    while (--trav >= run_ptr)
+              {
+                char c = *trav;
+                char *hi, *lo;
+
+                for (hi = lo = trav; (lo -= size) >= tmp_ptr; hi = lo)
+                  *hi = *lo;
+                *hi = c;
+              }
+          }
+      }
+  }
+}
diff --git a/REORG.TODO/stdlib/quick_exit.c b/REORG.TODO/stdlib/quick_exit.c
new file mode 100644
index 0000000000..67ad043727
--- /dev/null
+++ b/REORG.TODO/stdlib/quick_exit.c
@@ -0,0 +1,48 @@
+/* Copyright (C) 2009-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <sysdep.h>
+#include <signal.h>
+#include <errno.h>
+#include <shlib-compat.h>
+#include "exit.h"
+
+void
+__new_quick_exit (int status)
+{
+  /* The new quick_exit, following C++11 18.5.12, does not run object
+     destructors.   While C11 says nothing about object destructors,
+     since it has none, the intent is to run the registered
+     at_quick_exit handlers and then run _Exit immediately without
+     disturbing the state of the process and threads.  */
+  __run_exit_handlers (status, &__quick_exit_funcs, false, false);
+}
+versioned_symbol (libc, __new_quick_exit, quick_exit, GLIBC_2_24);
+
+#if SHLIB_COMPAT(libc, GLIBC_2_10, GLIBC_2_24)
+void
+attribute_compat_text_section
+__old_quick_exit (int status)
+{
+  /* The old quick_exit runs thread_local destructors.  */
+  __run_exit_handlers (status, &__quick_exit_funcs, false, true);
+}
+compat_symbol (libc, __old_quick_exit, quick_exit, GLIBC_2_10);
+#endif
diff --git a/REORG.TODO/stdlib/rand.c b/REORG.TODO/stdlib/rand.c
new file mode 100644
index 0000000000..a036319ce7
--- /dev/null
+++ b/REORG.TODO/stdlib/rand.c
@@ -0,0 +1,28 @@
+/* Copyright (C) 1991-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <stdlib.h>
+
+#undef	rand
+
+
+/* Return a random integer between 0 and RAND_MAX.  */
+int
+rand (void)
+{
+  return (int) __random ();
+}
diff --git a/REORG.TODO/stdlib/rand_r.c b/REORG.TODO/stdlib/rand_r.c
new file mode 100644
index 0000000000..ca681e8b53
--- /dev/null
+++ b/REORG.TODO/stdlib/rand_r.c
@@ -0,0 +1,48 @@
+/* Reentrant random function from POSIX.1c.
+   Copyright (C) 1996-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <stdlib.h>
+
+
+/* This algorithm is mentioned in the ISO C standard, here extended
+   for 32 bits.  */
+int
+rand_r (unsigned int *seed)
+{
+  unsigned int next = *seed;
+  int result;
+
+  next *= 1103515245;
+  next += 12345;
+  result = (unsigned int) (next / 65536) % 2048;
+
+  next *= 1103515245;
+  next += 12345;
+  result <<= 10;
+  result ^= (unsigned int) (next / 65536) % 1024;
+
+  next *= 1103515245;
+  next += 12345;
+  result <<= 10;
+  result ^= (unsigned int) (next / 65536) % 1024;
+
+  *seed = next;
+
+  return result;
+}
diff --git a/REORG.TODO/stdlib/random.c b/REORG.TODO/stdlib/random.c
new file mode 100644
index 0000000000..43bdb1232e
--- /dev/null
+++ b/REORG.TODO/stdlib/random.c
@@ -0,0 +1,300 @@
+/* Copyright (C) 1995-2017 Free Software Foundation, Inc.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ * This is derived from the Berkeley source:
+ *	@(#)random.c	5.5 (Berkeley) 7/6/88
+ * It was reworked for the GNU C Library by Roland McGrath.
+ * Rewritten to use reentrant functions by Ulrich Drepper, 1995.
+ */
+
+/*
+   Copyright (C) 1983 Regents of the University of California.
+   All rights reserved.
+
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   4. Neither the name of the University nor the names of its contributors
+      may be used to endorse or promote products derived from this software
+      without specific prior written permission.
+
+   THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+   ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+   ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+   FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+   OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+   HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+   LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+   OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+   SUCH DAMAGE.*/
+
+#include <libc-lock.h>
+#include <limits.h>
+#include <stddef.h>
+#include <stdlib.h>
+
+
+/* An improved random number generation package.  In addition to the standard
+   rand()/srand() like interface, this package also has a special state info
+   interface.  The initstate() routine is called with a seed, an array of
+   bytes, and a count of how many bytes are being passed in; this array is
+   then initialized to contain information for random number generation with
+   that much state information.  Good sizes for the amount of state
+   information are 32, 64, 128, and 256 bytes.  The state can be switched by
+   calling the setstate() function with the same array as was initialized
+   with initstate().  By default, the package runs with 128 bytes of state
+   information and generates far better random numbers than a linear
+   congruential generator.  If the amount of state information is less than
+   32 bytes, a simple linear congruential R.N.G. is used.  Internally, the
+   state information is treated as an array of longs; the zeroth element of
+   the array is the type of R.N.G. being used (small integer); the remainder
+   of the array is the state information for the R.N.G.  Thus, 32 bytes of
+   state information will give 7 longs worth of state information, which will
+   allow a degree seven polynomial.  (Note: The zeroth word of state
+   information also has some other information stored in it; see setstate
+   for details).  The random number generation technique is a linear feedback
+   shift register approach, employing trinomials (since there are fewer terms
+   to sum up that way).  In this approach, the least significant bit of all
+   the numbers in the state table will act as a linear feedback shift register,
+   and will have period 2^deg - 1 (where deg is the degree of the polynomial
+   being used, assuming that the polynomial is irreducible and primitive).
+   The higher order bits will have longer periods, since their values are
+   also influenced by pseudo-random carries out of the lower bits.  The
+   total period of the generator is approximately deg*(2**deg - 1); thus
+   doubling the amount of state information has a vast influence on the
+   period of the generator.  Note: The deg*(2**deg - 1) is an approximation
+   only good for large deg, when the period of the shift register is the
+   dominant factor.  With deg equal to seven, the period is actually much
+   longer than the 7*(2**7 - 1) predicted by this formula.  */
+
+
+
+/* For each of the currently supported random number generators, we have a
+   break value on the amount of state information (you need at least this many
+   bytes of state info to support this random number generator), a degree for
+   the polynomial (actually a trinomial) that the R.N.G. is based on, and
+   separation between the two lower order coefficients of the trinomial.  */
+
+/* Linear congruential.  */
+#define	TYPE_0		0
+#define	BREAK_0		8
+#define	DEG_0		0
+#define	SEP_0		0
+
+/* x**7 + x**3 + 1.  */
+#define	TYPE_1		1
+#define	BREAK_1		32
+#define	DEG_1		7
+#define	SEP_1		3
+
+/* x**15 + x + 1.  */
+#define	TYPE_2		2
+#define	BREAK_2		64
+#define	DEG_2		15
+#define	SEP_2		1
+
+/* x**31 + x**3 + 1.  */
+#define	TYPE_3		3
+#define	BREAK_3		128
+#define	DEG_3		31
+#define	SEP_3		3
+
+/* x**63 + x + 1.  */
+#define	TYPE_4		4
+#define	BREAK_4		256
+#define	DEG_4		63
+#define	SEP_4		1
+
+
+/* Array versions of the above information to make code run faster.
+   Relies on fact that TYPE_i == i.  */
+
+#define	MAX_TYPES	5	/* Max number of types above.  */
+
+
+/* Initially, everything is set up as if from:
+	initstate(1, randtbl, 128);
+   Note that this initialization takes advantage of the fact that srandom
+   advances the front and rear pointers 10*rand_deg times, and hence the
+   rear pointer which starts at 0 will also end up at zero; thus the zeroth
+   element of the state information, which contains info about the current
+   position of the rear pointer is just
+	(MAX_TYPES * (rptr - state)) + TYPE_3 == TYPE_3.  */
+
+static int32_t randtbl[DEG_3 + 1] =
+  {
+    TYPE_3,
+
+    -1726662223, 379960547, 1735697613, 1040273694, 1313901226,
+    1627687941, -179304937, -2073333483, 1780058412, -1989503057,
+    -615974602, 344556628, 939512070, -1249116260, 1507946756,
+    -812545463, 154635395, 1388815473, -1926676823, 525320961,
+    -1009028674, 968117788, -123449607, 1284210865, 435012392,
+    -2017506339, -911064859, -370259173, 1132637927, 1398500161,
+    -205601318,
+  };
+
+
+static struct random_data unsafe_state =
+  {
+/* FPTR and RPTR are two pointers into the state info, a front and a rear
+   pointer.  These two pointers are always rand_sep places apart, as they
+   cycle through the state information.  (Yes, this does mean we could get
+   away with just one pointer, but the code for random is more efficient
+   this way).  The pointers are left positioned as they would be from the call:
+	initstate(1, randtbl, 128);
+   (The position of the rear pointer, rptr, is really 0 (as explained above
+   in the initialization of randtbl) because the state table pointer is set
+   to point to randtbl[1] (as explained below).)  */
+
+    .fptr = &randtbl[SEP_3 + 1],
+    .rptr = &randtbl[1],
+
+/* The following things are the pointer to the state information table,
+   the type of the current generator, the degree of the current polynomial
+   being used, and the separation between the two pointers.
+   Note that for efficiency of random, we remember the first location of
+   the state information, not the zeroth.  Hence it is valid to access
+   state[-1], which is used to store the type of the R.N.G.
+   Also, we remember the last location, since this is more efficient than
+   indexing every time to find the address of the last element to see if
+   the front and rear pointers have wrapped.  */
+
+    .state = &randtbl[1],
+
+    .rand_type = TYPE_3,
+    .rand_deg = DEG_3,
+    .rand_sep = SEP_3,
+
+    .end_ptr = &randtbl[sizeof (randtbl) / sizeof (randtbl[0])]
+};
+
+/* POSIX.1c requires that there is mutual exclusion for the `rand' and
+   `srand' functions to prevent concurrent calls from modifying common
+   data.  */
+__libc_lock_define_initialized (static, lock)
+
+/* Initialize the random number generator based on the given seed.  If the
+   type is the trivial no-state-information type, just remember the seed.
+   Otherwise, initializes state[] based on the given "seed" via a linear
+   congruential generator.  Then, the pointers are set to known locations
+   that are exactly rand_sep places apart.  Lastly, it cycles the state
+   information a given number of times to get rid of any initial dependencies
+   introduced by the L.C.R.N.G.  Note that the initialization of randtbl[]
+   for default usage relies on values produced by this routine.  */
+void
+__srandom (unsigned int x)
+{
+  __libc_lock_lock (lock);
+  (void) __srandom_r (x, &unsafe_state);
+  __libc_lock_unlock (lock);
+}
+
+weak_alias (__srandom, srandom)
+weak_alias (__srandom, srand)
+
+/* Initialize the state information in the given array of N bytes for
+   future random number generation.  Based on the number of bytes we
+   are given, and the break values for the different R.N.G.'s, we choose
+   the best (largest) one we can and set things up for it.  srandom is
+   then called to initialize the state information.  Note that on return
+   from srandom, we set state[-1] to be the type multiplexed with the current
+   value of the rear pointer; this is so successive calls to initstate won't
+   lose this information and will be able to restart with setstate.
+   Note: The first thing we do is save the current state, if any, just like
+   setstate so that it doesn't matter when initstate is called.
+   Returns a pointer to the old state.  */
+char *
+__initstate (unsigned int seed, char *arg_state, size_t n)
+{
+  int32_t *ostate;
+  int ret;
+
+  __libc_lock_lock (lock);
+
+  ostate = &unsafe_state.state[-1];
+
+  ret = __initstate_r (seed, arg_state, n, &unsafe_state);
+
+  __libc_lock_unlock (lock);
+
+  return ret == -1 ? NULL : (char *) ostate;
+}
+
+weak_alias (__initstate, initstate)
+
+/* Restore the state from the given state array.
+   Note: It is important that we also remember the locations of the pointers
+   in the current state information, and restore the locations of the pointers
+   from the old state information.  This is done by multiplexing the pointer
+   location into the zeroth word of the state information. Note that due
+   to the order in which things are done, it is OK to call setstate with the
+   same state as the current state
+   Returns a pointer to the old state information.  */
+char *
+__setstate (char *arg_state)
+{
+  int32_t *ostate;
+
+  __libc_lock_lock (lock);
+
+  ostate = &unsafe_state.state[-1];
+
+  if (__setstate_r (arg_state, &unsafe_state) < 0)
+    ostate = NULL;
+
+  __libc_lock_unlock (lock);
+
+  return (char *) ostate;
+}
+
+weak_alias (__setstate, setstate)
+
+/* If we are using the trivial TYPE_0 R.N.G., just do the old linear
+   congruential bit.  Otherwise, we do our fancy trinomial stuff, which is the
+   same in all the other cases due to all the global variables that have been
+   set up.  The basic operation is to add the number at the rear pointer into
+   the one at the front pointer.  Then both pointers are advanced to the next
+   location cyclically in the table.  The value returned is the sum generated,
+   reduced to 31 bits by throwing away the "least random" low bit.
+   Note: The code takes advantage of the fact that both the front and
+   rear pointers can't wrap on the same call by not testing the rear
+   pointer if the front one has wrapped.  Returns a 31-bit random number.  */
+
+long int
+__random (void)
+{
+  int32_t retval;
+
+  __libc_lock_lock (lock);
+
+  (void) __random_r (&unsafe_state, &retval);
+
+  __libc_lock_unlock (lock);
+
+  return retval;
+}
+
+weak_alias (__random, random)
diff --git a/REORG.TODO/stdlib/random_r.c b/REORG.TODO/stdlib/random_r.c
new file mode 100644
index 0000000000..c3f6f9aede
--- /dev/null
+++ b/REORG.TODO/stdlib/random_r.c
@@ -0,0 +1,401 @@
+/*
+   Copyright (C) 1995-2017 Free Software Foundation, Inc.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+   Copyright (C) 1983 Regents of the University of California.
+   All rights reserved.
+
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   4. Neither the name of the University nor the names of its contributors
+      may be used to endorse or promote products derived from this software
+      without specific prior written permission.
+
+   THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+   ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+   ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+   FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+   OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+   HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+   LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+   OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+   SUCH DAMAGE.*/
+
+/*
+ * This is derived from the Berkeley source:
+ *	@(#)random.c	5.5 (Berkeley) 7/6/88
+ * It was reworked for the GNU C Library by Roland McGrath.
+ * Rewritten to be reentrant by Ulrich Drepper, 1995
+ */
+
+#include <errno.h>
+#include <limits.h>
+#include <stddef.h>
+#include <stdlib.h>
+
+
+/* An improved random number generation package.  In addition to the standard
+   rand()/srand() like interface, this package also has a special state info
+   interface.  The initstate() routine is called with a seed, an array of
+   bytes, and a count of how many bytes are being passed in; this array is
+   then initialized to contain information for random number generation with
+   that much state information.  Good sizes for the amount of state
+   information are 32, 64, 128, and 256 bytes.  The state can be switched by
+   calling the setstate() function with the same array as was initialized
+   with initstate().  By default, the package runs with 128 bytes of state
+   information and generates far better random numbers than a linear
+   congruential generator.  If the amount of state information is less than
+   32 bytes, a simple linear congruential R.N.G. is used.  Internally, the
+   state information is treated as an array of longs; the zeroth element of
+   the array is the type of R.N.G. being used (small integer); the remainder
+   of the array is the state information for the R.N.G.  Thus, 32 bytes of
+   state information will give 7 longs worth of state information, which will
+   allow a degree seven polynomial.  (Note: The zeroth word of state
+   information also has some other information stored in it; see setstate
+   for details).  The random number generation technique is a linear feedback
+   shift register approach, employing trinomials (since there are fewer terms
+   to sum up that way).  In this approach, the least significant bit of all
+   the numbers in the state table will act as a linear feedback shift register,
+   and will have period 2^deg - 1 (where deg is the degree of the polynomial
+   being used, assuming that the polynomial is irreducible and primitive).
+   The higher order bits will have longer periods, since their values are
+   also influenced by pseudo-random carries out of the lower bits.  The
+   total period of the generator is approximately deg*(2**deg - 1); thus
+   doubling the amount of state information has a vast influence on the
+   period of the generator.  Note: The deg*(2**deg - 1) is an approximation
+   only good for large deg, when the period of the shift register is the
+   dominant factor.  With deg equal to seven, the period is actually much
+   longer than the 7*(2**7 - 1) predicted by this formula.  */
+
+
+
+/* For each of the currently supported random number generators, we have a
+   break value on the amount of state information (you need at least this many
+   bytes of state info to support this random number generator), a degree for
+   the polynomial (actually a trinomial) that the R.N.G. is based on, and
+   separation between the two lower order coefficients of the trinomial.  */
+
+/* Linear congruential.  */
+#define	TYPE_0		0
+#define	BREAK_0		8
+#define	DEG_0		0
+#define	SEP_0		0
+
+/* x**7 + x**3 + 1.  */
+#define	TYPE_1		1
+#define	BREAK_1		32
+#define	DEG_1		7
+#define	SEP_1		3
+
+/* x**15 + x + 1.  */
+#define	TYPE_2		2
+#define	BREAK_2		64
+#define	DEG_2		15
+#define	SEP_2		1
+
+/* x**31 + x**3 + 1.  */
+#define	TYPE_3		3
+#define	BREAK_3		128
+#define	DEG_3		31
+#define	SEP_3		3
+
+/* x**63 + x + 1.  */
+#define	TYPE_4		4
+#define	BREAK_4		256
+#define	DEG_4		63
+#define	SEP_4		1
+
+
+/* Array versions of the above information to make code run faster.
+   Relies on fact that TYPE_i == i.  */
+
+#define	MAX_TYPES	5	/* Max number of types above.  */
+
+struct random_poly_info
+{
+  int seps[MAX_TYPES];
+  int degrees[MAX_TYPES];
+};
+
+static const struct random_poly_info random_poly_info =
+{
+  { SEP_0, SEP_1, SEP_2, SEP_3, SEP_4 },
+  { DEG_0, DEG_1, DEG_2, DEG_3, DEG_4 }
+};
+
+
+
+
+/* Initialize the random number generator based on the given seed.  If the
+   type is the trivial no-state-information type, just remember the seed.
+   Otherwise, initializes state[] based on the given "seed" via a linear
+   congruential generator.  Then, the pointers are set to known locations
+   that are exactly rand_sep places apart.  Lastly, it cycles the state
+   information a given number of times to get rid of any initial dependencies
+   introduced by the L.C.R.N.G.  Note that the initialization of randtbl[]
+   for default usage relies on values produced by this routine.  */
+int
+__srandom_r (unsigned int seed, struct random_data *buf)
+{
+  int type;
+  int32_t *state;
+  long int i;
+  int32_t word;
+  int32_t *dst;
+  int kc;
+
+  if (buf == NULL)
+    goto fail;
+  type = buf->rand_type;
+  if ((unsigned int) type >= MAX_TYPES)
+    goto fail;
+
+  state = buf->state;
+  /* We must make sure the seed is not 0.  Take arbitrarily 1 in this case.  */
+  if (seed == 0)
+    seed = 1;
+  state[0] = seed;
+  if (type == TYPE_0)
+    goto done;
+
+  dst = state;
+  word = seed;
+  kc = buf->rand_deg;
+  for (i = 1; i < kc; ++i)
+    {
+      /* This does:
+	   state[i] = (16807 * state[i - 1]) % 2147483647;
+	 but avoids overflowing 31 bits.  */
+      long int hi = word / 127773;
+      long int lo = word % 127773;
+      word = 16807 * lo - 2836 * hi;
+      if (word < 0)
+	word += 2147483647;
+      *++dst = word;
+    }
+
+  buf->fptr = &state[buf->rand_sep];
+  buf->rptr = &state[0];
+  kc *= 10;
+  while (--kc >= 0)
+    {
+      int32_t discard;
+      (void) __random_r (buf, &discard);
+    }
+
+ done:
+  return 0;
+
+ fail:
+  return -1;
+}
+
+weak_alias (__srandom_r, srandom_r)
+
+/* Initialize the state information in the given array of N bytes for
+   future random number generation.  Based on the number of bytes we
+   are given, and the break values for the different R.N.G.'s, we choose
+   the best (largest) one we can and set things up for it.  srandom is
+   then called to initialize the state information.  Note that on return
+   from srandom, we set state[-1] to be the type multiplexed with the current
+   value of the rear pointer; this is so successive calls to initstate won't
+   lose this information and will be able to restart with setstate.
+   Note: The first thing we do is save the current state, if any, just like
+   setstate so that it doesn't matter when initstate is called.
+   Returns 0 on success, non-zero on failure.  */
+int
+__initstate_r (unsigned int seed, char *arg_state, size_t n,
+	       struct random_data *buf)
+{
+  if (buf == NULL)
+    goto fail;
+
+  int32_t *old_state = buf->state;
+  if (old_state != NULL)
+    {
+      int old_type = buf->rand_type;
+      if (old_type == TYPE_0)
+	old_state[-1] = TYPE_0;
+      else
+	old_state[-1] = (MAX_TYPES * (buf->rptr - old_state)) + old_type;
+    }
+
+  int type;
+  if (n >= BREAK_3)
+    type = n < BREAK_4 ? TYPE_3 : TYPE_4;
+  else if (n < BREAK_1)
+    {
+      if (n < BREAK_0)
+	goto fail;
+
+      type = TYPE_0;
+    }
+  else
+    type = n < BREAK_2 ? TYPE_1 : TYPE_2;
+
+  int degree = random_poly_info.degrees[type];
+  int separation = random_poly_info.seps[type];
+
+  buf->rand_type = type;
+  buf->rand_sep = separation;
+  buf->rand_deg = degree;
+  int32_t *state = &((int32_t *) arg_state)[1];	/* First location.  */
+  /* Must set END_PTR before srandom.  */
+  buf->end_ptr = &state[degree];
+
+  buf->state = state;
+
+  __srandom_r (seed, buf);
+
+  state[-1] = TYPE_0;
+  if (type != TYPE_0)
+    state[-1] = (buf->rptr - state) * MAX_TYPES + type;
+
+  return 0;
+
+ fail:
+  __set_errno (EINVAL);
+  return -1;
+}
+
+weak_alias (__initstate_r, initstate_r)
+
+/* Restore the state from the given state array.
+   Note: It is important that we also remember the locations of the pointers
+   in the current state information, and restore the locations of the pointers
+   from the old state information.  This is done by multiplexing the pointer
+   location into the zeroth word of the state information. Note that due
+   to the order in which things are done, it is OK to call setstate with the
+   same state as the current state
+   Returns 0 on success, non-zero on failure.  */
+int
+__setstate_r (char *arg_state, struct random_data *buf)
+{
+  int32_t *new_state = 1 + (int32_t *) arg_state;
+  int type;
+  int old_type;
+  int32_t *old_state;
+  int degree;
+  int separation;
+
+  if (arg_state == NULL || buf == NULL)
+    goto fail;
+
+  old_type = buf->rand_type;
+  old_state = buf->state;
+  if (old_type == TYPE_0)
+    old_state[-1] = TYPE_0;
+  else
+    old_state[-1] = (MAX_TYPES * (buf->rptr - old_state)) + old_type;
+
+  type = new_state[-1] % MAX_TYPES;
+  if (type < TYPE_0 || type > TYPE_4)
+    goto fail;
+
+  buf->rand_deg = degree = random_poly_info.degrees[type];
+  buf->rand_sep = separation = random_poly_info.seps[type];
+  buf->rand_type = type;
+
+  if (type != TYPE_0)
+    {
+      int rear = new_state[-1] / MAX_TYPES;
+      buf->rptr = &new_state[rear];
+      buf->fptr = &new_state[(rear + separation) % degree];
+    }
+  buf->state = new_state;
+  /* Set end_ptr too.  */
+  buf->end_ptr = &new_state[degree];
+
+  return 0;
+
+ fail:
+  __set_errno (EINVAL);
+  return -1;
+}
+
+weak_alias (__setstate_r, setstate_r)
+
+/* If we are using the trivial TYPE_0 R.N.G., just do the old linear
+   congruential bit.  Otherwise, we do our fancy trinomial stuff, which is the
+   same in all the other cases due to all the global variables that have been
+   set up.  The basic operation is to add the number at the rear pointer into
+   the one at the front pointer.  Then both pointers are advanced to the next
+   location cyclically in the table.  The value returned is the sum generated,
+   reduced to 31 bits by throwing away the "least random" low bit.
+   Note: The code takes advantage of the fact that both the front and
+   rear pointers can't wrap on the same call by not testing the rear
+   pointer if the front one has wrapped.  Returns a 31-bit random number.  */
+
+int
+__random_r (struct random_data *buf, int32_t *result)
+{
+  int32_t *state;
+
+  if (buf == NULL || result == NULL)
+    goto fail;
+
+  state = buf->state;
+
+  if (buf->rand_type == TYPE_0)
+    {
+      int32_t val = state[0];
+      val = ((state[0] * 1103515245) + 12345) & 0x7fffffff;
+      state[0] = val;
+      *result = val;
+    }
+  else
+    {
+      int32_t *fptr = buf->fptr;
+      int32_t *rptr = buf->rptr;
+      int32_t *end_ptr = buf->end_ptr;
+      int32_t val;
+
+      val = *fptr += *rptr;
+      /* Chucking least random bit.  */
+      *result = (val >> 1) & 0x7fffffff;
+      ++fptr;
+      if (fptr >= end_ptr)
+	{
+	  fptr = state;
+	  ++rptr;
+	}
+      else
+	{
+	  ++rptr;
+	  if (rptr >= end_ptr)
+	    rptr = state;
+	}
+      buf->fptr = fptr;
+      buf->rptr = rptr;
+    }
+  return 0;
+
+ fail:
+  __set_errno (EINVAL);
+  return -1;
+}
+
+weak_alias (__random_r, random_r)
diff --git a/REORG.TODO/stdlib/rpmatch.c b/REORG.TODO/stdlib/rpmatch.c
new file mode 100644
index 0000000000..965c2999d8
--- /dev/null
+++ b/REORG.TODO/stdlib/rpmatch.c
@@ -0,0 +1,61 @@
+/* Determine whether string value is affirmation or negative response
+   according to current locale's data.
+   This file is part of the GNU C Library.
+   Copyright (C) 1996-2017 Free Software Foundation, Inc.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <langinfo.h>
+#include <stdlib.h>
+#include <regex.h>
+
+
+/* Match against one of the response patterns, compiling the pattern
+   first if necessary.  */
+static int
+try (const char *response,
+     const int tag, const int match, const int nomatch,
+     const char **lastp, regex_t *re)
+{
+  const char *pattern = nl_langinfo (tag);
+  if (pattern != *lastp)
+    {
+      /* The pattern has changed.  */
+      if (*lastp != NULL)
+        {
+          /* Free the old compiled pattern.  */
+          __regfree (re);
+          *lastp = NULL;
+        }
+      /* Compile the pattern and cache it for future runs.  */
+      if (__regcomp (re, pattern, REG_EXTENDED) != 0)
+        return -1;
+      *lastp = pattern;
+    }
+
+  /* Try the pattern.  */
+  return __regexec (re, response, 0, NULL, 0) == 0 ? match : nomatch;
+}
+
+int
+rpmatch (const char *response)
+{
+  /* We cache the response patterns and compiled regexps here.  */
+  static const char *yesexpr, *noexpr;
+  static regex_t yesre, nore;
+
+  return (try (response, YESEXPR, 1, 0, &yesexpr, &yesre) ?:
+	  try (response, NOEXPR, 0, -1, &noexpr, &nore));
+}
diff --git a/REORG.TODO/stdlib/rshift.c b/REORG.TODO/stdlib/rshift.c
new file mode 100644
index 0000000000..d4c7f77769
--- /dev/null
+++ b/REORG.TODO/stdlib/rshift.c
@@ -0,0 +1,78 @@
+/* mpn_rshift -- Shift right a low-level natural-number integer.
+
+Copyright (C) 1991-2017 Free Software Foundation, Inc.
+
+This file is part of the GNU MP Library.
+
+The GNU MP Library is free software; you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation; either version 2.1 of the License, or (at your
+option) any later version.
+
+The GNU MP 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 Lesser General Public
+License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with the GNU MP Library; see the file COPYING.LIB.  If not, see
+<http://www.gnu.org/licenses/>.  */
+
+#include <gmp.h>
+#include "gmp-impl.h"
+
+#include <assert.h>
+
+/* Shift U (pointed to by UP and USIZE limbs long) CNT bits to the right
+   and store the USIZE least significant limbs of the result at WP.
+   The bits shifted out to the right are returned.
+
+   Argument constraints:
+   1. 0 < CNT < BITS_PER_MP_LIMB
+   2. If the result is to be written over the input, WP must be <= UP.
+*/
+
+mp_limb_t
+mpn_rshift (register mp_ptr wp,
+	    register mp_srcptr up, mp_size_t usize,
+	    register unsigned int cnt)
+{
+  register mp_limb_t high_limb, low_limb;
+  register unsigned sh_1, sh_2;
+  register mp_size_t i;
+  mp_limb_t retval;
+
+  assert (usize != 0 && cnt != 0);
+
+  sh_1 = cnt;
+
+#if 0
+  if (sh_1 == 0)
+    {
+      if (wp != up)
+	{
+	  /* Copy from low end to high end, to allow specified input/output
+	     overlapping.  */
+	  for (i = 0; i < usize; i++)
+	    wp[i] = up[i];
+	}
+      return usize;
+    }
+#endif
+
+  wp -= 1;
+  sh_2 = BITS_PER_MP_LIMB - sh_1;
+  high_limb = up[0];
+  retval = high_limb << sh_2;
+  low_limb = high_limb;
+
+  for (i = 1; i < usize; i++)
+    {
+      high_limb = up[i];
+      wp[i] = (low_limb >> sh_1) | (high_limb << sh_2);
+      low_limb = high_limb;
+    }
+  wp[i] = low_limb >> sh_1;
+
+  return retval;
+}
diff --git a/REORG.TODO/stdlib/secure-getenv.c b/REORG.TODO/stdlib/secure-getenv.c
new file mode 100644
index 0000000000..8d6a7e39a6
--- /dev/null
+++ b/REORG.TODO/stdlib/secure-getenv.c
@@ -0,0 +1,36 @@
+/* Copyright (C) 1991-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <stdlib.h>
+#include <unistd.h>
+
+#include <shlib-compat.h>
+
+/* Some programs and especially the libc itself have to be careful
+   what values to accept from the environment.  This special version
+   checks for SUID or SGID first before doing any work.  */
+char *
+__libc_secure_getenv (const char *name)
+{
+  return __libc_enable_secure ? NULL : getenv (name);
+}
+weak_alias (__libc_secure_getenv, secure_getenv)
+libc_hidden_weak (__libc_secure_getenv)
+
+#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_17)
+compat_symbol (libc, __libc_secure_getenv, __secure_getenv, GLIBC_2_0);
+#endif
diff --git a/REORG.TODO/stdlib/seed48.c b/REORG.TODO/stdlib/seed48.c
new file mode 100644
index 0000000000..3108b0ca76
--- /dev/null
+++ b/REORG.TODO/stdlib/seed48.c
@@ -0,0 +1,28 @@
+/* Copyright (C) 1995-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <stdlib.h>
+
+
+unsigned short int *
+seed48 (unsigned short int seed16v[3])
+{
+  (void) __seed48_r (seed16v, &__libc_drand48_data);
+
+  return __libc_drand48_data.__old_x;
+}
diff --git a/REORG.TODO/stdlib/seed48_r.c b/REORG.TODO/stdlib/seed48_r.c
new file mode 100644
index 0000000000..3cdf351dfd
--- /dev/null
+++ b/REORG.TODO/stdlib/seed48_r.c
@@ -0,0 +1,39 @@
+/* Copyright (C) 1995-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <stdlib.h>
+#include <string.h>
+#include <limits.h>
+
+int
+__seed48_r (unsigned short int seed16v[3], struct drand48_data *buffer)
+{
+  /* Save old value at a private place to be used as return value.  */
+  memcpy (buffer->__old_x, buffer->__x, sizeof (buffer->__x));
+
+  /* Install new state.  */
+  buffer->__x[2] = seed16v[2];
+  buffer->__x[1] = seed16v[1];
+  buffer->__x[0] = seed16v[0];
+  buffer->__a = 0x5deece66dull;
+  buffer->__c = 0xb;
+  buffer->__init = 1;
+
+  return 0;
+}
+weak_alias (__seed48_r, seed48_r)
diff --git a/REORG.TODO/stdlib/setcontext.c b/REORG.TODO/stdlib/setcontext.c
new file mode 100644
index 0000000000..3fe77177a2
--- /dev/null
+++ b/REORG.TODO/stdlib/setcontext.c
@@ -0,0 +1,29 @@
+/* Copyright (C) 1998-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <errno.h>
+#include <ucontext.h>
+
+int
+setcontext (const ucontext_t *ucp)
+{
+  __set_errno (ENOSYS);
+  return -1;
+}
+
+
+stub_warning (setcontext)
diff --git a/REORG.TODO/stdlib/setenv.c b/REORG.TODO/stdlib/setenv.c
new file mode 100644
index 0000000000..f3c0220045
--- /dev/null
+++ b/REORG.TODO/stdlib/setenv.c
@@ -0,0 +1,340 @@
+/* Copyright (C) 1992-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#if HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+/* Pacify GCC; see the commentary about VALLEN below.  This is needed
+   at least through GCC 4.9.2.  Pacify GCC for the entire file, as
+   there seems to be no way to pacify GCC selectively, only for the
+   place where it's needed.  Do not use DIAG_IGNORE_NEEDS_COMMENT
+   here, as it's not defined yet.  */
+#pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
+
+#include <errno.h>
+#if !_LIBC
+# if !defined errno && !defined HAVE_ERRNO_DECL
+extern int errno;
+# endif
+# define __set_errno(ev) ((errno) = (ev))
+#endif
+
+#if _LIBC || HAVE_STDLIB_H
+# include <stdlib.h>
+#endif
+#if _LIBC || HAVE_STRING_H
+# include <string.h>
+#endif
+#if _LIBC || HAVE_UNISTD_H
+# include <unistd.h>
+#endif
+
+#if !_LIBC
+# define __environ	environ
+# ifndef HAVE_ENVIRON_DECL
+extern char **environ;
+# endif
+#endif
+
+#if _LIBC
+/* This lock protects against simultaneous modifications of `environ'.  */
+# include <libc-lock.h>
+__libc_lock_define_initialized (static, envlock)
+# define LOCK	__libc_lock_lock (envlock)
+# define UNLOCK	__libc_lock_unlock (envlock)
+#else
+# define LOCK
+# define UNLOCK
+#endif
+
+/* In the GNU C library we must keep the namespace clean.  */
+#ifdef _LIBC
+# define setenv __setenv
+# define unsetenv __unsetenv
+# define clearenv __clearenv
+# define tfind __tfind
+# define tsearch __tsearch
+#endif
+
+/* In the GNU C library implementation we try to be more clever and
+   allow arbitrarily many changes of the environment given that the used
+   values are from a small set.  Outside glibc this will eat up all
+   memory after a while.  */
+#if defined _LIBC || (defined HAVE_SEARCH_H && defined HAVE_TSEARCH \
+		      && defined __GNUC__)
+# define USE_TSEARCH	1
+# include <search.h>
+
+/* This is a pointer to the root of the search tree with the known
+   values.  */
+static void *known_values;
+
+# define KNOWN_VALUE(Str) \
+  ({									      \
+    void *value = tfind (Str, &known_values, (__compar_fn_t) strcmp);	      \
+    value != NULL ? *(char **) value : NULL;				      \
+  })
+# define STORE_VALUE(Str) \
+  tsearch (Str, &known_values, (__compar_fn_t) strcmp)
+
+#else
+# undef USE_TSEARCH
+
+# define KNOWN_VALUE(Str) NULL
+# define STORE_VALUE(Str) do { } while (0)
+
+#endif
+
+
+/* If this variable is not a null pointer we allocated the current
+   environment.  */
+static char **last_environ;
+
+
+/* This function is used by `setenv' and `putenv'.  The difference between
+   the two functions is that for the former must create a new string which
+   is then placed in the environment, while the argument of `putenv'
+   must be used directly.  This is all complicated by the fact that we try
+   to reuse values once generated for a `setenv' call since we can never
+   free the strings.  */
+int
+__add_to_environ (const char *name, const char *value, const char *combined,
+		  int replace)
+{
+  char **ep;
+  size_t size;
+
+  /* Compute lengths before locking, so that the critical section is
+     less of a performance bottleneck.  VALLEN is needed only if
+     COMBINED is null (unfortunately GCC is not smart enough to deduce
+     this; see the #pragma at the start of this file).  Testing
+     COMBINED instead of VALUE causes setenv (..., NULL, ...)  to dump
+     core now instead of corrupting memory later.  */
+  const size_t namelen = strlen (name);
+  size_t vallen;
+  if (combined == NULL)
+    vallen = strlen (value) + 1;
+
+  LOCK;
+
+  /* We have to get the pointer now that we have the lock and not earlier
+     since another thread might have created a new environment.  */
+  ep = __environ;
+
+  size = 0;
+  if (ep != NULL)
+    {
+      for (; *ep != NULL; ++ep)
+	if (!strncmp (*ep, name, namelen) && (*ep)[namelen] == '=')
+	  break;
+	else
+	  ++size;
+    }
+
+  if (ep == NULL || __builtin_expect (*ep == NULL, 1))
+    {
+      char **new_environ;
+
+      /* We allocated this space; we can extend it.  */
+      new_environ = (char **) realloc (last_environ,
+				       (size + 2) * sizeof (char *));
+      if (new_environ == NULL)
+	{
+	  UNLOCK;
+	  return -1;
+	}
+
+      if (__environ != last_environ)
+	memcpy ((char *) new_environ, (char *) __environ,
+		size * sizeof (char *));
+
+      new_environ[size] = NULL;
+      new_environ[size + 1] = NULL;
+      ep = new_environ + size;
+
+      last_environ = __environ = new_environ;
+    }
+  if (*ep == NULL || replace)
+    {
+      char *np;
+
+      /* Use the user string if given.  */
+      if (combined != NULL)
+	np = (char *) combined;
+      else
+	{
+	  const size_t varlen = namelen + 1 + vallen;
+#ifdef USE_TSEARCH
+	  char *new_value;
+	  int use_alloca = __libc_use_alloca (varlen);
+	  if (__builtin_expect (use_alloca, 1))
+	    new_value = (char *) alloca (varlen);
+	  else
+	    {
+	      new_value = malloc (varlen);
+	      if (new_value == NULL)
+		{
+		  UNLOCK;
+		  return -1;
+		}
+	    }
+# ifdef _LIBC
+	  __mempcpy (__mempcpy (__mempcpy (new_value, name, namelen), "=", 1),
+		     value, vallen);
+# else
+	  memcpy (new_value, name, namelen);
+	  new_value[namelen] = '=';
+	  memcpy (&new_value[namelen + 1], value, vallen);
+# endif
+
+	  np = KNOWN_VALUE (new_value);
+	  if (__glibc_likely (np == NULL))
+#endif
+	    {
+#ifdef USE_TSEARCH
+	      if (__glibc_unlikely (! use_alloca))
+		np = new_value;
+	      else
+#endif
+		{
+		  np = malloc (varlen);
+		  if (__glibc_unlikely (np == NULL))
+		    {
+		      UNLOCK;
+		      return -1;
+		    }
+
+#ifdef USE_TSEARCH
+		  memcpy (np, new_value, varlen);
+#else
+		  memcpy (np, name, namelen);
+		  np[namelen] = '=';
+		  memcpy (&np[namelen + 1], value, vallen);
+#endif
+		}
+	      /* And remember the value.  */
+	      STORE_VALUE (np);
+	    }
+#ifdef USE_TSEARCH
+	  else
+	    {
+	      if (__glibc_unlikely (! use_alloca))
+		free (new_value);
+	    }
+#endif
+	}
+
+      *ep = np;
+    }
+
+  UNLOCK;
+
+  return 0;
+}
+
+int
+setenv (const char *name, const char *value, int replace)
+{
+  if (name == NULL || *name == '\0' || strchr (name, '=') != NULL)
+    {
+      __set_errno (EINVAL);
+      return -1;
+    }
+
+  return __add_to_environ (name, value, NULL, replace);
+}
+
+int
+unsetenv (const char *name)
+{
+  size_t len;
+  char **ep;
+
+  if (name == NULL || *name == '\0' || strchr (name, '=') != NULL)
+    {
+      __set_errno (EINVAL);
+      return -1;
+    }
+
+  len = strlen (name);
+
+  LOCK;
+
+  ep = __environ;
+  if (ep != NULL)
+    while (*ep != NULL)
+      {
+	if (!strncmp (*ep, name, len) && (*ep)[len] == '=')
+	  {
+	    /* Found it.  Remove this pointer by moving later ones back.  */
+	    char **dp = ep;
+
+	    do
+		dp[0] = dp[1];
+	    while (*dp++);
+	    /* Continue the loop in case NAME appears again.  */
+	  }
+	else
+	  ++ep;
+      }
+
+  UNLOCK;
+
+  return 0;
+}
+
+/* The `clearenv' was planned to be added to POSIX.1 but probably
+   never made it.  Nevertheless the POSIX.9 standard (POSIX bindings
+   for Fortran 77) requires this function.  */
+int
+clearenv (void)
+{
+  LOCK;
+
+  if (__environ == last_environ && __environ != NULL)
+    {
+      /* We allocated this environment so we can free it.  */
+      free (__environ);
+      last_environ = NULL;
+    }
+
+  /* Clear the environment pointer removes the whole environment.  */
+  __environ = NULL;
+
+  UNLOCK;
+
+  return 0;
+}
+#ifdef _LIBC
+libc_freeres_fn (free_mem)
+{
+  /* Remove all traces.  */
+  clearenv ();
+
+  /* Now remove the search tree.  */
+  __tdestroy (known_values, free);
+  known_values = NULL;
+}
+
+# undef setenv
+# undef unsetenv
+# undef clearenv
+weak_alias (__setenv, setenv)
+weak_alias (__unsetenv, unsetenv)
+weak_alias (__clearenv, clearenv)
+#endif
diff --git a/REORG.TODO/stdlib/srand48.c b/REORG.TODO/stdlib/srand48.c
new file mode 100644
index 0000000000..9d665055a0
--- /dev/null
+++ b/REORG.TODO/stdlib/srand48.c
@@ -0,0 +1,26 @@
+/* Copyright (C) 1995-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <stdlib.h>
+
+
+void
+srand48 (long seedval)
+{
+  (void) __srand48_r (seedval, &__libc_drand48_data);
+}
diff --git a/REORG.TODO/stdlib/srand48_r.c b/REORG.TODO/stdlib/srand48_r.c
new file mode 100644
index 0000000000..43bca37062
--- /dev/null
+++ b/REORG.TODO/stdlib/srand48_r.c
@@ -0,0 +1,39 @@
+/* Copyright (C) 1995-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <stdlib.h>
+#include <limits.h>
+
+int
+__srand48_r (long int seedval, struct drand48_data *buffer)
+{
+  /* The standards say we only have 32 bits.  */
+  if (sizeof (long int) > 4)
+    seedval &= 0xffffffffl;
+
+  buffer->__x[2] = seedval >> 16;
+  buffer->__x[1] = seedval & 0xffffl;
+  buffer->__x[0] = 0x330e;
+
+  buffer->__a = 0x5deece66dull;
+  buffer->__c = 0xb;
+  buffer->__init = 1;
+
+  return 0;
+}
+weak_alias (__srand48_r, srand48_r)
diff --git a/REORG.TODO/stdlib/stdlib.h b/REORG.TODO/stdlib/stdlib.h
new file mode 100644
index 0000000000..0a693c2b41
--- /dev/null
+++ b/REORG.TODO/stdlib/stdlib.h
@@ -0,0 +1,911 @@
+/* Copyright (C) 1991-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ *	ISO C99 Standard: 7.20 General utilities	<stdlib.h>
+ */
+
+#ifndef	_STDLIB_H
+
+#define __GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION
+#include <bits/libc-header-start.h>
+
+/* Get size_t, wchar_t and NULL from <stddef.h>.  */
+#define __need_size_t
+#define __need_wchar_t
+#define __need_NULL
+#include <stddef.h>
+
+__BEGIN_DECLS
+
+#define	_STDLIB_H	1
+
+#if (defined __USE_XOPEN || defined __USE_XOPEN2K8) && !defined _SYS_WAIT_H
+/* XPG requires a few symbols from <sys/wait.h> being defined.  */
+# include <bits/waitflags.h>
+# include <bits/waitstatus.h>
+
+/* Define the macros <sys/wait.h> also would define this way.  */
+# define WEXITSTATUS(status)	__WEXITSTATUS (status)
+# define WTERMSIG(status)	__WTERMSIG (status)
+# define WSTOPSIG(status)	__WSTOPSIG (status)
+# define WIFEXITED(status)	__WIFEXITED (status)
+# define WIFSIGNALED(status)	__WIFSIGNALED (status)
+# define WIFSTOPPED(status)	__WIFSTOPPED (status)
+# ifdef __WIFCONTINUED
+#  define WIFCONTINUED(status)	__WIFCONTINUED (status)
+# endif
+#endif	/* X/Open or XPG7 and <sys/wait.h> not included.  */
+
+/* _FloatN API tests for enablement.  */
+#include <bits/floatn.h>
+
+/* Returned by `div'.  */
+typedef struct
+  {
+    int quot;			/* Quotient.  */
+    int rem;			/* Remainder.  */
+  } div_t;
+
+/* Returned by `ldiv'.  */
+#ifndef __ldiv_t_defined
+typedef struct
+  {
+    long int quot;		/* Quotient.  */
+    long int rem;		/* Remainder.  */
+  } ldiv_t;
+# define __ldiv_t_defined	1
+#endif
+
+#if defined __USE_ISOC99 && !defined __lldiv_t_defined
+/* Returned by `lldiv'.  */
+__extension__ typedef struct
+  {
+    long long int quot;		/* Quotient.  */
+    long long int rem;		/* Remainder.  */
+  } lldiv_t;
+# define __lldiv_t_defined	1
+#endif
+
+
+/* The largest number rand will return (same as INT_MAX).  */
+#define	RAND_MAX	2147483647
+
+
+/* We define these the same for all machines.
+   Changes from this to the outside world should be done in `_exit'.  */
+#define	EXIT_FAILURE	1	/* Failing exit status.  */
+#define	EXIT_SUCCESS	0	/* Successful exit status.  */
+
+
+/* Maximum length of a multibyte character in the current locale.  */
+#define	MB_CUR_MAX	(__ctype_get_mb_cur_max ())
+extern size_t __ctype_get_mb_cur_max (void) __THROW __wur;
+
+
+/* Convert a string to a floating-point number.  */
+extern double atof (const char *__nptr)
+     __THROW __attribute_pure__ __nonnull ((1)) __wur;
+/* Convert a string to an integer.  */
+extern int atoi (const char *__nptr)
+     __THROW __attribute_pure__ __nonnull ((1)) __wur;
+/* Convert a string to a long integer.  */
+extern long int atol (const char *__nptr)
+     __THROW __attribute_pure__ __nonnull ((1)) __wur;
+
+#ifdef __USE_ISOC99
+/* Convert a string to a long long integer.  */
+__extension__ extern long long int atoll (const char *__nptr)
+     __THROW __attribute_pure__ __nonnull ((1)) __wur;
+#endif
+
+/* Convert a string to a floating-point number.  */
+extern double strtod (const char *__restrict __nptr,
+		      char **__restrict __endptr)
+     __THROW __nonnull ((1));
+
+#ifdef	__USE_ISOC99
+/* Likewise for `float' and `long double' sizes of floating-point numbers.  */
+extern float strtof (const char *__restrict __nptr,
+		     char **__restrict __endptr) __THROW __nonnull ((1));
+
+extern long double strtold (const char *__restrict __nptr,
+			    char **__restrict __endptr)
+     __THROW __nonnull ((1));
+#endif
+
+/* Convert a string to a long integer.  */
+extern long int strtol (const char *__restrict __nptr,
+			char **__restrict __endptr, int __base)
+     __THROW __nonnull ((1));
+/* Convert a string to an unsigned long integer.  */
+extern unsigned long int strtoul (const char *__restrict __nptr,
+				  char **__restrict __endptr, int __base)
+     __THROW __nonnull ((1));
+
+#ifdef __USE_MISC
+/* Convert a string to a quadword integer.  */
+__extension__
+extern long long int strtoq (const char *__restrict __nptr,
+			     char **__restrict __endptr, int __base)
+     __THROW __nonnull ((1));
+/* Convert a string to an unsigned quadword integer.  */
+__extension__
+extern unsigned long long int strtouq (const char *__restrict __nptr,
+				       char **__restrict __endptr, int __base)
+     __THROW __nonnull ((1));
+#endif /* Use misc.  */
+
+#ifdef __USE_ISOC99
+/* Convert a string to a quadword integer.  */
+__extension__
+extern long long int strtoll (const char *__restrict __nptr,
+			      char **__restrict __endptr, int __base)
+     __THROW __nonnull ((1));
+/* Convert a string to an unsigned quadword integer.  */
+__extension__
+extern unsigned long long int strtoull (const char *__restrict __nptr,
+					char **__restrict __endptr, int __base)
+     __THROW __nonnull ((1));
+#endif /* ISO C99 or use MISC.  */
+
+/* Convert a floating-point number to a string.  */
+#if __GLIBC_USE (IEC_60559_BFP_EXT)
+extern int strfromd (char *__dest, size_t __size, const char *__format,
+		     double __f)
+     __THROW __nonnull ((3));
+
+extern int strfromf (char *__dest, size_t __size, const char *__format,
+		     float __f)
+     __THROW __nonnull ((3));
+
+extern int strfroml (char *__dest, size_t __size, const char *__format,
+		     long double __f)
+     __THROW __nonnull ((3));
+#endif
+
+#if __HAVE_FLOAT128 && __GLIBC_USE (IEC_60559_TYPES_EXT)
+extern int strfromf128 (char *__dest, size_t __size, const char * __format,
+			_Float128 __f)
+     __THROW __nonnull ((3));
+#endif
+
+
+#ifdef __USE_GNU
+/* The concept of one static locale per category is not very well
+   thought out.  Many applications will need to process its data using
+   information from several different locales.  Another problem is
+   the implementation of the internationalization handling in the
+   ISO C++ standard library.  To support this another set of
+   the functions using locale data exist which take an additional
+   argument.
+
+   Attention: even though several *_l interfaces are part of POSIX:2008,
+   these are not.  */
+
+/* Structure for reentrant locale using functions.  This is an
+   (almost) opaque type for the user level programs.  */
+# include <xlocale.h>
+
+/* Special versions of the functions above which take the locale to
+   use as an additional parameter.  */
+extern long int strtol_l (const char *__restrict __nptr,
+			  char **__restrict __endptr, int __base,
+			  __locale_t __loc) __THROW __nonnull ((1, 4));
+
+extern unsigned long int strtoul_l (const char *__restrict __nptr,
+				    char **__restrict __endptr,
+				    int __base, __locale_t __loc)
+     __THROW __nonnull ((1, 4));
+
+__extension__
+extern long long int strtoll_l (const char *__restrict __nptr,
+				char **__restrict __endptr, int __base,
+				__locale_t __loc)
+     __THROW __nonnull ((1, 4));
+
+__extension__
+extern unsigned long long int strtoull_l (const char *__restrict __nptr,
+					  char **__restrict __endptr,
+					  int __base, __locale_t __loc)
+     __THROW __nonnull ((1, 4));
+
+extern double strtod_l (const char *__restrict __nptr,
+			char **__restrict __endptr, __locale_t __loc)
+     __THROW __nonnull ((1, 3));
+
+extern float strtof_l (const char *__restrict __nptr,
+		       char **__restrict __endptr, __locale_t __loc)
+     __THROW __nonnull ((1, 3));
+
+extern long double strtold_l (const char *__restrict __nptr,
+			      char **__restrict __endptr,
+			      __locale_t __loc)
+     __THROW __nonnull ((1, 3));
+#endif /* GNU */
+
+
+#ifdef __USE_EXTERN_INLINES
+__extern_inline int
+__NTH (atoi (const char *__nptr))
+{
+  return (int) strtol (__nptr, (char **) NULL, 10);
+}
+__extern_inline long int
+__NTH (atol (const char *__nptr))
+{
+  return strtol (__nptr, (char **) NULL, 10);
+}
+
+# ifdef __USE_ISOC99
+__extension__ __extern_inline long long int
+__NTH (atoll (const char *__nptr))
+{
+  return strtoll (__nptr, (char **) NULL, 10);
+}
+# endif
+#endif /* Optimizing and Inlining.  */
+
+
+#if defined __USE_MISC || defined __USE_XOPEN_EXTENDED
+/* Convert N to base 64 using the digits "./0-9A-Za-z", least-significant
+   digit first.  Returns a pointer to static storage overwritten by the
+   next call.  */
+extern char *l64a (long int __n) __THROW __wur;
+
+/* Read a number from a string S in base 64 as above.  */
+extern long int a64l (const char *__s)
+     __THROW __attribute_pure__ __nonnull ((1)) __wur;
+
+#endif	/* Use misc || extended X/Open.  */
+
+#if defined __USE_MISC || defined __USE_XOPEN_EXTENDED
+# include <sys/types.h>	/* we need int32_t... */
+
+/* These are the functions that actually do things.  The `random', `srandom',
+   `initstate' and `setstate' functions are those from BSD Unices.
+   The `rand' and `srand' functions are required by the ANSI standard.
+   We provide both interfaces to the same random number generator.  */
+/* Return a random long integer between 0 and RAND_MAX inclusive.  */
+extern long int random (void) __THROW;
+
+/* Seed the random number generator with the given number.  */
+extern void srandom (unsigned int __seed) __THROW;
+
+/* Initialize the random number generator to use state buffer STATEBUF,
+   of length STATELEN, and seed it with SEED.  Optimal lengths are 8, 16,
+   32, 64, 128 and 256, the bigger the better; values less than 8 will
+   cause an error and values greater than 256 will be rounded down.  */
+extern char *initstate (unsigned int __seed, char *__statebuf,
+			size_t __statelen) __THROW __nonnull ((2));
+
+/* Switch the random number generator to state buffer STATEBUF,
+   which should have been previously initialized by `initstate'.  */
+extern char *setstate (char *__statebuf) __THROW __nonnull ((1));
+
+
+# ifdef __USE_MISC
+/* Reentrant versions of the `random' family of functions.
+   These functions all use the following data structure to contain
+   state, rather than global state variables.  */
+
+struct random_data
+  {
+    int32_t *fptr;		/* Front pointer.  */
+    int32_t *rptr;		/* Rear pointer.  */
+    int32_t *state;		/* Array of state values.  */
+    int rand_type;		/* Type of random number generator.  */
+    int rand_deg;		/* Degree of random number generator.  */
+    int rand_sep;		/* Distance between front and rear.  */
+    int32_t *end_ptr;		/* Pointer behind state table.  */
+  };
+
+extern int random_r (struct random_data *__restrict __buf,
+		     int32_t *__restrict __result) __THROW __nonnull ((1, 2));
+
+extern int srandom_r (unsigned int __seed, struct random_data *__buf)
+     __THROW __nonnull ((2));
+
+extern int initstate_r (unsigned int __seed, char *__restrict __statebuf,
+			size_t __statelen,
+			struct random_data *__restrict __buf)
+     __THROW __nonnull ((2, 4));
+
+extern int setstate_r (char *__restrict __statebuf,
+		       struct random_data *__restrict __buf)
+     __THROW __nonnull ((1, 2));
+# endif	/* Use misc.  */
+#endif	/* Use extended X/Open || misc. */
+
+
+/* Return a random integer between 0 and RAND_MAX inclusive.  */
+extern int rand (void) __THROW;
+/* Seed the random number generator with the given number.  */
+extern void srand (unsigned int __seed) __THROW;
+
+#ifdef __USE_POSIX199506
+/* Reentrant interface according to POSIX.1.  */
+extern int rand_r (unsigned int *__seed) __THROW;
+#endif
+
+
+#if defined __USE_MISC || defined __USE_XOPEN
+/* System V style 48-bit random number generator functions.  */
+
+/* Return non-negative, double-precision floating-point value in [0.0,1.0).  */
+extern double drand48 (void) __THROW;
+extern double erand48 (unsigned short int __xsubi[3]) __THROW __nonnull ((1));
+
+/* Return non-negative, long integer in [0,2^31).  */
+extern long int lrand48 (void) __THROW;
+extern long int nrand48 (unsigned short int __xsubi[3])
+     __THROW __nonnull ((1));
+
+/* Return signed, long integers in [-2^31,2^31).  */
+extern long int mrand48 (void) __THROW;
+extern long int jrand48 (unsigned short int __xsubi[3])
+     __THROW __nonnull ((1));
+
+/* Seed random number generator.  */
+extern void srand48 (long int __seedval) __THROW;
+extern unsigned short int *seed48 (unsigned short int __seed16v[3])
+     __THROW __nonnull ((1));
+extern void lcong48 (unsigned short int __param[7]) __THROW __nonnull ((1));
+
+# ifdef __USE_MISC
+/* Data structure for communication with thread safe versions.  This
+   type is to be regarded as opaque.  It's only exported because users
+   have to allocate objects of this type.  */
+struct drand48_data
+  {
+    unsigned short int __x[3];	/* Current state.  */
+    unsigned short int __old_x[3]; /* Old state.  */
+    unsigned short int __c;	/* Additive const. in congruential formula.  */
+    unsigned short int __init;	/* Flag for initializing.  */
+    __extension__ unsigned long long int __a;	/* Factor in congruential
+						   formula.  */
+  };
+
+/* Return non-negative, double-precision floating-point value in [0.0,1.0).  */
+extern int drand48_r (struct drand48_data *__restrict __buffer,
+		      double *__restrict __result) __THROW __nonnull ((1, 2));
+extern int erand48_r (unsigned short int __xsubi[3],
+		      struct drand48_data *__restrict __buffer,
+		      double *__restrict __result) __THROW __nonnull ((1, 2));
+
+/* Return non-negative, long integer in [0,2^31).  */
+extern int lrand48_r (struct drand48_data *__restrict __buffer,
+		      long int *__restrict __result)
+     __THROW __nonnull ((1, 2));
+extern int nrand48_r (unsigned short int __xsubi[3],
+		      struct drand48_data *__restrict __buffer,
+		      long int *__restrict __result)
+     __THROW __nonnull ((1, 2));
+
+/* Return signed, long integers in [-2^31,2^31).  */
+extern int mrand48_r (struct drand48_data *__restrict __buffer,
+		      long int *__restrict __result)
+     __THROW __nonnull ((1, 2));
+extern int jrand48_r (unsigned short int __xsubi[3],
+		      struct drand48_data *__restrict __buffer,
+		      long int *__restrict __result)
+     __THROW __nonnull ((1, 2));
+
+/* Seed random number generator.  */
+extern int srand48_r (long int __seedval, struct drand48_data *__buffer)
+     __THROW __nonnull ((2));
+
+extern int seed48_r (unsigned short int __seed16v[3],
+		     struct drand48_data *__buffer) __THROW __nonnull ((1, 2));
+
+extern int lcong48_r (unsigned short int __param[7],
+		      struct drand48_data *__buffer)
+     __THROW __nonnull ((1, 2));
+# endif	/* Use misc.  */
+#endif	/* Use misc or X/Open.  */
+
+/* Allocate SIZE bytes of memory.  */
+extern void *malloc (size_t __size) __THROW __attribute_malloc__ __wur;
+/* Allocate NMEMB elements of SIZE bytes each, all initialized to 0.  */
+extern void *calloc (size_t __nmemb, size_t __size)
+     __THROW __attribute_malloc__ __wur;
+
+/* Re-allocate the previously allocated block
+   in PTR, making the new block SIZE bytes long.  */
+/* __attribute_malloc__ is not used, because if realloc returns
+   the same pointer that was passed to it, aliasing needs to be allowed
+   between objects pointed by the old and new pointers.  */
+extern void *realloc (void *__ptr, size_t __size)
+     __THROW __attribute_warn_unused_result__;
+
+#ifdef __USE_GNU
+/* Re-allocate the previously allocated block in PTR, making the new
+   block large enough for NMEMB elements of SIZE bytes each.  */
+/* __attribute_malloc__ is not used, because if reallocarray returns
+   the same pointer that was passed to it, aliasing needs to be allowed
+   between objects pointed by the old and new pointers.  */
+extern void *reallocarray (void *__ptr, size_t __nmemb, size_t __size)
+     __THROW __attribute_warn_unused_result__;
+#endif
+
+/* Free a block allocated by `malloc', `realloc' or `calloc'.  */
+extern void free (void *__ptr) __THROW;
+
+#ifdef __USE_MISC
+# include <alloca.h>
+#endif /* Use misc.  */
+
+#if (defined __USE_XOPEN_EXTENDED && !defined __USE_XOPEN2K) \
+    || defined __USE_MISC
+/* Allocate SIZE bytes on a page boundary.  The storage cannot be freed.  */
+extern void *valloc (size_t __size) __THROW __attribute_malloc__ __wur;
+#endif
+
+#ifdef __USE_XOPEN2K
+/* Allocate memory of SIZE bytes with an alignment of ALIGNMENT.  */
+extern int posix_memalign (void **__memptr, size_t __alignment, size_t __size)
+     __THROW __nonnull ((1)) __wur;
+#endif
+
+#ifdef __USE_ISOC11
+/* ISO C variant of aligned allocation.  */
+extern void *aligned_alloc (size_t __alignment, size_t __size)
+     __THROW __attribute_malloc__ __attribute_alloc_size__ ((2)) __wur;
+#endif
+
+/* Abort execution and generate a core-dump.  */
+extern void abort (void) __THROW __attribute__ ((__noreturn__));
+
+
+/* Register a function to be called when `exit' is called.  */
+extern int atexit (void (*__func) (void)) __THROW __nonnull ((1));
+
+#if defined __USE_ISOC11 || defined __USE_ISOCXX11
+/* Register a function to be called when `quick_exit' is called.  */
+# ifdef __cplusplus
+extern "C++" int at_quick_exit (void (*__func) (void))
+     __THROW __asm ("at_quick_exit") __nonnull ((1));
+# else
+extern int at_quick_exit (void (*__func) (void)) __THROW __nonnull ((1));
+# endif
+#endif
+
+#ifdef	__USE_MISC
+/* Register a function to be called with the status
+   given to `exit' and the given argument.  */
+extern int on_exit (void (*__func) (int __status, void *__arg), void *__arg)
+     __THROW __nonnull ((1));
+#endif
+
+/* Call all functions registered with `atexit' and `on_exit',
+   in the reverse of the order in which they were registered,
+   perform stdio cleanup, and terminate program execution with STATUS.  */
+extern void exit (int __status) __THROW __attribute__ ((__noreturn__));
+
+#if defined __USE_ISOC11 || defined __USE_ISOCXX11
+/* Call all functions registered with `at_quick_exit' in the reverse
+   of the order in which they were registered and terminate program
+   execution with STATUS.  */
+extern void quick_exit (int __status) __THROW __attribute__ ((__noreturn__));
+#endif
+
+#ifdef __USE_ISOC99
+/* Terminate the program with STATUS without calling any of the
+   functions registered with `atexit' or `on_exit'.  */
+extern void _Exit (int __status) __THROW __attribute__ ((__noreturn__));
+#endif
+
+
+/* Return the value of envariable NAME, or NULL if it doesn't exist.  */
+extern char *getenv (const char *__name) __THROW __nonnull ((1)) __wur;
+
+#ifdef __USE_GNU
+/* This function is similar to the above but returns NULL if the
+   programs is running with SUID or SGID enabled.  */
+extern char *secure_getenv (const char *__name)
+     __THROW __nonnull ((1)) __wur;
+#endif
+
+#if defined __USE_MISC || defined __USE_XOPEN
+/* The SVID says this is in <stdio.h>, but this seems a better place.	*/
+/* Put STRING, which is of the form "NAME=VALUE", in the environment.
+   If there is no `=', remove NAME from the environment.  */
+extern int putenv (char *__string) __THROW __nonnull ((1));
+#endif
+
+#ifdef __USE_XOPEN2K
+/* Set NAME to VALUE in the environment.
+   If REPLACE is nonzero, overwrite an existing value.  */
+extern int setenv (const char *__name, const char *__value, int __replace)
+     __THROW __nonnull ((2));
+
+/* Remove the variable NAME from the environment.  */
+extern int unsetenv (const char *__name) __THROW __nonnull ((1));
+#endif
+
+#ifdef	__USE_MISC
+/* The `clearenv' was planned to be added to POSIX.1 but probably
+   never made it.  Nevertheless the POSIX.9 standard (POSIX bindings
+   for Fortran 77) requires this function.  */
+extern int clearenv (void) __THROW;
+#endif
+
+
+#if defined __USE_MISC \
+    || (defined __USE_XOPEN_EXTENDED && !defined __USE_XOPEN2K8)
+/* Generate a unique temporary file name from TEMPLATE.
+   The last six characters of TEMPLATE must be "XXXXXX";
+   they are replaced with a string that makes the file name unique.
+   Always returns TEMPLATE, it's either a temporary file name or a null
+   string if it cannot get a unique file name.  */
+extern char *mktemp (char *__template) __THROW __nonnull ((1));
+#endif
+
+#if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K8
+/* Generate a unique temporary file name from TEMPLATE.
+   The last six characters of TEMPLATE must be "XXXXXX";
+   they are replaced with a string that makes the filename unique.
+   Returns a file descriptor open on the file for reading and writing,
+   or -1 if it cannot create a uniquely-named file.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+# ifndef __USE_FILE_OFFSET64
+extern int mkstemp (char *__template) __nonnull ((1)) __wur;
+# else
+#  ifdef __REDIRECT
+extern int __REDIRECT (mkstemp, (char *__template), mkstemp64)
+     __nonnull ((1)) __wur;
+#  else
+#   define mkstemp mkstemp64
+#  endif
+# endif
+# ifdef __USE_LARGEFILE64
+extern int mkstemp64 (char *__template) __nonnull ((1)) __wur;
+# endif
+#endif
+
+#ifdef __USE_MISC
+/* Similar to mkstemp, but the template can have a suffix after the
+   XXXXXX.  The length of the suffix is specified in the second
+   parameter.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+# ifndef __USE_FILE_OFFSET64
+extern int mkstemps (char *__template, int __suffixlen) __nonnull ((1)) __wur;
+# else
+#  ifdef __REDIRECT
+extern int __REDIRECT (mkstemps, (char *__template, int __suffixlen),
+		       mkstemps64) __nonnull ((1)) __wur;
+#  else
+#   define mkstemps mkstemps64
+#  endif
+# endif
+# ifdef __USE_LARGEFILE64
+extern int mkstemps64 (char *__template, int __suffixlen)
+     __nonnull ((1)) __wur;
+# endif
+#endif
+
+#ifdef __USE_XOPEN2K8
+/* Create a unique temporary directory from TEMPLATE.
+   The last six characters of TEMPLATE must be "XXXXXX";
+   they are replaced with a string that makes the directory name unique.
+   Returns TEMPLATE, or a null pointer if it cannot get a unique name.
+   The directory is created mode 700.  */
+extern char *mkdtemp (char *__template) __THROW __nonnull ((1)) __wur;
+#endif
+
+#ifdef __USE_GNU
+/* Generate a unique temporary file name from TEMPLATE similar to
+   mkstemp.  But allow the caller to pass additional flags which are
+   used in the open call to create the file..
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+# ifndef __USE_FILE_OFFSET64
+extern int mkostemp (char *__template, int __flags) __nonnull ((1)) __wur;
+# else
+#  ifdef __REDIRECT
+extern int __REDIRECT (mkostemp, (char *__template, int __flags), mkostemp64)
+     __nonnull ((1)) __wur;
+#  else
+#   define mkostemp mkostemp64
+#  endif
+# endif
+# ifdef __USE_LARGEFILE64
+extern int mkostemp64 (char *__template, int __flags) __nonnull ((1)) __wur;
+# endif
+
+/* Similar to mkostemp, but the template can have a suffix after the
+   XXXXXX.  The length of the suffix is specified in the second
+   parameter.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+# ifndef __USE_FILE_OFFSET64
+extern int mkostemps (char *__template, int __suffixlen, int __flags)
+     __nonnull ((1)) __wur;
+# else
+#  ifdef __REDIRECT
+extern int __REDIRECT (mkostemps, (char *__template, int __suffixlen,
+				   int __flags), mkostemps64)
+     __nonnull ((1)) __wur;
+#  else
+#   define mkostemps mkostemps64
+#  endif
+# endif
+# ifdef __USE_LARGEFILE64
+extern int mkostemps64 (char *__template, int __suffixlen, int __flags)
+     __nonnull ((1)) __wur;
+# endif
+#endif
+
+
+/* Execute the given line as a shell command.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern int system (const char *__command) __wur;
+
+
+#ifdef	__USE_GNU
+/* Return a malloc'd string containing the canonical absolute name of the
+   existing named file.  */
+extern char *canonicalize_file_name (const char *__name)
+     __THROW __nonnull ((1)) __wur;
+#endif
+
+#if defined __USE_MISC || defined __USE_XOPEN_EXTENDED
+/* Return the canonical absolute name of file NAME.  If RESOLVED is
+   null, the result is malloc'd; otherwise, if the canonical name is
+   PATH_MAX chars or more, returns null with `errno' set to
+   ENAMETOOLONG; if the name fits in fewer than PATH_MAX chars,
+   returns the name in RESOLVED.  */
+extern char *realpath (const char *__restrict __name,
+		       char *__restrict __resolved) __THROW __wur;
+#endif
+
+
+/* Shorthand for type of comparison functions.  */
+#ifndef __COMPAR_FN_T
+# define __COMPAR_FN_T
+typedef int (*__compar_fn_t) (const void *, const void *);
+
+# ifdef	__USE_GNU
+typedef __compar_fn_t comparison_fn_t;
+# endif
+#endif
+#ifdef __USE_GNU
+typedef int (*__compar_d_fn_t) (const void *, const void *, void *);
+#endif
+
+/* Do a binary search for KEY in BASE, which consists of NMEMB elements
+   of SIZE bytes each, using COMPAR to perform the comparisons.  */
+extern void *bsearch (const void *__key, const void *__base,
+		      size_t __nmemb, size_t __size, __compar_fn_t __compar)
+     __nonnull ((1, 2, 5)) __wur;
+
+#ifdef __USE_EXTERN_INLINES
+# include <bits/stdlib-bsearch.h>
+#endif
+
+/* Sort NMEMB elements of BASE, of SIZE bytes each,
+   using COMPAR to perform the comparisons.  */
+extern void qsort (void *__base, size_t __nmemb, size_t __size,
+		   __compar_fn_t __compar) __nonnull ((1, 4));
+#ifdef __USE_GNU
+extern void qsort_r (void *__base, size_t __nmemb, size_t __size,
+		     __compar_d_fn_t __compar, void *__arg)
+  __nonnull ((1, 4));
+#endif
+
+
+/* Return the absolute value of X.  */
+extern int abs (int __x) __THROW __attribute__ ((__const__)) __wur;
+extern long int labs (long int __x) __THROW __attribute__ ((__const__)) __wur;
+
+#ifdef __USE_ISOC99
+__extension__ extern long long int llabs (long long int __x)
+     __THROW __attribute__ ((__const__)) __wur;
+#endif
+
+
+/* Return the `div_t', `ldiv_t' or `lldiv_t' representation
+   of the value of NUMER over DENOM. */
+/* GCC may have built-ins for these someday.  */
+extern div_t div (int __numer, int __denom)
+     __THROW __attribute__ ((__const__)) __wur;
+extern ldiv_t ldiv (long int __numer, long int __denom)
+     __THROW __attribute__ ((__const__)) __wur;
+
+#ifdef __USE_ISOC99
+__extension__ extern lldiv_t lldiv (long long int __numer,
+				    long long int __denom)
+     __THROW __attribute__ ((__const__)) __wur;
+#endif
+
+
+#if (defined __USE_XOPEN_EXTENDED && !defined __USE_XOPEN2K8) \
+    || defined __USE_MISC
+/* Convert floating point numbers to strings.  The returned values are
+   valid only until another call to the same function.  */
+
+/* Convert VALUE to a string with NDIGIT digits and return a pointer to
+   this.  Set *DECPT with the position of the decimal character and *SIGN
+   with the sign of the number.  */
+extern char *ecvt (double __value, int __ndigit, int *__restrict __decpt,
+		   int *__restrict __sign) __THROW __nonnull ((3, 4)) __wur;
+
+/* Convert VALUE to a string rounded to NDIGIT decimal digits.  Set *DECPT
+   with the position of the decimal character and *SIGN with the sign of
+   the number.  */
+extern char *fcvt (double __value, int __ndigit, int *__restrict __decpt,
+		   int *__restrict __sign) __THROW __nonnull ((3, 4)) __wur;
+
+/* If possible convert VALUE to a string with NDIGIT significant digits.
+   Otherwise use exponential representation.  The resulting string will
+   be written to BUF.  */
+extern char *gcvt (double __value, int __ndigit, char *__buf)
+     __THROW __nonnull ((3)) __wur;
+#endif
+
+#ifdef __USE_MISC
+/* Long double versions of above functions.  */
+extern char *qecvt (long double __value, int __ndigit,
+		    int *__restrict __decpt, int *__restrict __sign)
+     __THROW __nonnull ((3, 4)) __wur;
+extern char *qfcvt (long double __value, int __ndigit,
+		    int *__restrict __decpt, int *__restrict __sign)
+     __THROW __nonnull ((3, 4)) __wur;
+extern char *qgcvt (long double __value, int __ndigit, char *__buf)
+     __THROW __nonnull ((3)) __wur;
+
+
+/* Reentrant version of the functions above which provide their own
+   buffers.  */
+extern int ecvt_r (double __value, int __ndigit, int *__restrict __decpt,
+		   int *__restrict __sign, char *__restrict __buf,
+		   size_t __len) __THROW __nonnull ((3, 4, 5));
+extern int fcvt_r (double __value, int __ndigit, int *__restrict __decpt,
+		   int *__restrict __sign, char *__restrict __buf,
+		   size_t __len) __THROW __nonnull ((3, 4, 5));
+
+extern int qecvt_r (long double __value, int __ndigit,
+		    int *__restrict __decpt, int *__restrict __sign,
+		    char *__restrict __buf, size_t __len)
+     __THROW __nonnull ((3, 4, 5));
+extern int qfcvt_r (long double __value, int __ndigit,
+		    int *__restrict __decpt, int *__restrict __sign,
+		    char *__restrict __buf, size_t __len)
+     __THROW __nonnull ((3, 4, 5));
+#endif	/* misc */
+
+
+/* Return the length of the multibyte character
+   in S, which is no longer than N.  */
+extern int mblen (const char *__s, size_t __n) __THROW;
+/* Return the length of the given multibyte character,
+   putting its `wchar_t' representation in *PWC.  */
+extern int mbtowc (wchar_t *__restrict __pwc,
+		   const char *__restrict __s, size_t __n) __THROW;
+/* Put the multibyte character represented
+   by WCHAR in S, returning its length.  */
+extern int wctomb (char *__s, wchar_t __wchar) __THROW;
+
+
+/* Convert a multibyte string to a wide char string.  */
+extern size_t mbstowcs (wchar_t *__restrict  __pwcs,
+			const char *__restrict __s, size_t __n) __THROW;
+/* Convert a wide char string to multibyte string.  */
+extern size_t wcstombs (char *__restrict __s,
+			const wchar_t *__restrict __pwcs, size_t __n)
+     __THROW;
+
+
+#ifdef __USE_MISC
+/* Determine whether the string value of RESPONSE matches the affirmation
+   or negative response expression as specified by the LC_MESSAGES category
+   in the program's current locale.  Returns 1 if affirmative, 0 if
+   negative, and -1 if not matching.  */
+extern int rpmatch (const char *__response) __THROW __nonnull ((1)) __wur;
+#endif
+
+
+#if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K8
+/* Parse comma separated suboption from *OPTIONP and match against
+   strings in TOKENS.  If found return index and set *VALUEP to
+   optional value introduced by an equal sign.  If the suboption is
+   not part of TOKENS return in *VALUEP beginning of unknown
+   suboption.  On exit *OPTIONP is set to the beginning of the next
+   token or at the terminating NUL character.  */
+extern int getsubopt (char **__restrict __optionp,
+		      char *const *__restrict __tokens,
+		      char **__restrict __valuep)
+     __THROW __nonnull ((1, 2, 3)) __wur;
+#endif
+
+
+#ifdef __USE_XOPEN
+/* Setup DES tables according KEY.  */
+extern void setkey (const char *__key) __THROW __nonnull ((1));
+#endif
+
+
+/* X/Open pseudo terminal handling.  */
+
+#ifdef __USE_XOPEN2KXSI
+/* Return a master pseudo-terminal handle.  */
+extern int posix_openpt (int __oflag) __wur;
+#endif
+
+#ifdef __USE_XOPEN_EXTENDED
+/* The next four functions all take a master pseudo-tty fd and
+   perform an operation on the associated slave:  */
+
+/* Chown the slave to the calling user.  */
+extern int grantpt (int __fd) __THROW;
+
+/* Release an internal lock so the slave can be opened.
+   Call after grantpt().  */
+extern int unlockpt (int __fd) __THROW;
+
+/* Return the pathname of the pseudo terminal slave associated with
+   the master FD is open on, or NULL on errors.
+   The returned storage is good until the next call to this function.  */
+extern char *ptsname (int __fd) __THROW __wur;
+#endif
+
+#ifdef __USE_GNU
+/* Store at most BUFLEN characters of the pathname of the slave pseudo
+   terminal associated with the master FD is open on in BUF.
+   Return 0 on success, otherwise an error number.  */
+extern int ptsname_r (int __fd, char *__buf, size_t __buflen)
+     __THROW __nonnull ((2));
+
+/* Open a master pseudo terminal and return its file descriptor.  */
+extern int getpt (void);
+#endif
+
+#ifdef __USE_MISC
+/* Put the 1 minute, 5 minute and 15 minute load averages into the first
+   NELEM elements of LOADAVG.  Return the number written (never more than
+   three, but may be less than NELEM), or -1 if an error occurred.  */
+extern int getloadavg (double __loadavg[], int __nelem)
+     __THROW __nonnull ((1));
+#endif
+
+#if defined __USE_XOPEN_EXTENDED && !defined __USE_XOPEN2K
+/* Return the index into the active-logins file (utmp) for
+   the controlling terminal.  */
+extern int ttyslot (void) __THROW;
+#endif
+
+#include <bits/stdlib-float.h>
+
+/* Define some macros helping to catch buffer overflows.  */
+#if __USE_FORTIFY_LEVEL > 0 && defined __fortify_function
+# include <bits/stdlib.h>
+#endif
+#ifdef __LDBL_COMPAT
+# include <bits/stdlib-ldbl.h>
+#endif
+
+__END_DECLS
+
+#endif /* stdlib.h  */
diff --git a/REORG.TODO/stdlib/strfmon.c b/REORG.TODO/stdlib/strfmon.c
new file mode 100644
index 0000000000..dfaa9e0d9c
--- /dev/null
+++ b/REORG.TODO/stdlib/strfmon.c
@@ -0,0 +1,39 @@
+/* Formatting a monetary value according to the current locale.
+   Copyright (C) 1996-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@cygnus.com>
+   and Jochen Hein <Jochen.Hein@informatik.TU-Clausthal.de>, 1996.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <monetary.h>
+#include <stdarg.h>
+#include <locale/localeinfo.h>
+#include <math_ldbl_opt.h>
+
+ssize_t
+__strfmon (char *s, size_t maxsize, const char *format, ...)
+{
+  va_list ap;
+
+  va_start (ap, format);
+
+  ssize_t res = __vstrfmon_l (s, maxsize, _NL_CURRENT_LOCALE, format, ap);
+
+  va_end (ap);
+
+  return res;
+}
+ldbl_strong_alias (__strfmon, strfmon)
diff --git a/REORG.TODO/stdlib/strfmon_l.c b/REORG.TODO/stdlib/strfmon_l.c
new file mode 100644
index 0000000000..af64173800
--- /dev/null
+++ b/REORG.TODO/stdlib/strfmon_l.c
@@ -0,0 +1,625 @@
+/* Formatting a monetary value according to the given locale.
+   Copyright (C) 1996-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <ctype.h>
+#include <errno.h>
+#include <langinfo.h>
+#include <locale.h>
+#include <monetary.h>
+#include "../libio/libioP.h"
+#include "../libio/strfile.h"
+#include <printf.h>
+#include <stdarg.h>
+#include <stdio.h>
+#include <string.h>
+#include "../locale/localeinfo.h"
+
+
+#define out_char(Ch)							      \
+  do {									      \
+    if (dest >= s + maxsize - 1)					      \
+      {									      \
+	__set_errno (E2BIG);						      \
+	va_end (ap);							      \
+	return -1;							      \
+      }									      \
+    *dest++ = (Ch);							      \
+  } while (0)
+
+#define out_string(String)						      \
+  do {									      \
+    const char *_s = (String);						      \
+    while (*_s)								      \
+      out_char (*_s++);							      \
+  } while (0)
+
+#define out_nstring(String, N)						      \
+  do {									      \
+    int _n = (N);							      \
+    const char *_s = (String);						      \
+    while (_n-- > 0)							      \
+      out_char (*_s++);							      \
+  } while (0)
+
+#define to_digit(Ch) ((Ch) - '0')
+
+
+/* We use this code also for the extended locale handling where the
+   function gets as an additional argument the locale which has to be
+   used.  To access the values we have to redefine the _NL_CURRENT
+   macro.  */
+#undef _NL_CURRENT
+#define _NL_CURRENT(category, item) \
+  (current->values[_NL_ITEM_INDEX (item)].string)
+
+/* This function determines the number of digit groups in the output.
+   The definition is in printf_fp.c.  */
+extern unsigned int __guess_grouping (unsigned int intdig_max,
+				      const char *grouping, wchar_t sepchar);
+
+
+/* We have to overcome some problems with this implementation.  On the
+   one hand the strfmon() function is specified in XPG4 and of course
+   it has to follow this.  But on the other hand POSIX.2 specifies
+   some information in the LC_MONETARY category which should be used,
+   too.  Some of the information contradicts the information which can
+   be specified in format string.  */
+ssize_t
+__vstrfmon_l (char *s, size_t maxsize, __locale_t loc, const char *format,
+	      va_list ap)
+{
+  struct __locale_data *current = loc->__locales[LC_MONETARY];
+  _IO_strfile f;
+  struct printf_info info;
+  char *dest;			/* Pointer so copy the output.  */
+  const char *fmt;		/* Pointer that walks through format.  */
+
+  dest = s;
+  fmt = format;
+
+  /* Loop through the format-string.  */
+  while (*fmt != '\0')
+    {
+      /* The floating-point value to output.  */
+      union
+      {
+	double dbl;
+	__long_double_t ldbl;
+      }
+      fpnum;
+      int int_format;
+      int print_curr_symbol;
+      int left_prec;
+      int left_pad;
+      int right_prec;
+      int group;
+      char pad;
+      int is_long_double;
+      int p_sign_posn;
+      int n_sign_posn;
+      int sign_posn;
+      int other_sign_posn;
+      int left;
+      int is_negative;
+      int sep_by_space;
+      int other_sep_by_space;
+      int cs_precedes;
+      int other_cs_precedes;
+      const char *sign_string;
+      const char *other_sign_string;
+      int done;
+      const char *currency_symbol;
+      size_t currency_symbol_len;
+      long int width;
+      char *startp;
+      const void *ptr;
+      char space_char;
+
+      /* Process all character which do not introduce a format
+	 specification.  */
+      if (*fmt != '%')
+	{
+	  out_char (*fmt++);
+	  continue;
+	}
+
+      /* "%%" means a single '%' character.  */
+      if (fmt[1] == '%')
+	{
+	  out_char (*++fmt);
+	  ++fmt;
+	  continue;
+	}
+
+      /* Defaults for formatting.  */
+      int_format = 0;			/* Use international curr. symbol */
+      print_curr_symbol = 1;		/* Print the currency symbol.  */
+      left_prec = -1;			/* No left precision specified.  */
+      right_prec = -1;			/* No right precision specified.  */
+      group = 1;			/* Print digits grouped.  */
+      pad = ' ';			/* Fill character is <SP>.  */
+      is_long_double = 0;		/* Double argument by default.  */
+      p_sign_posn = -2;			/* This indicates whether the */
+      n_sign_posn = -2;			/* '(' flag is given.  */
+      width = -1;			/* No width specified so far.  */
+      left = 0;				/* Right justified by default.  */
+
+      /* Parse group characters.  */
+      while (1)
+	{
+	  switch (*++fmt)
+	    {
+	    case '=':			/* Set fill character.  */
+	      pad = *++fmt;
+	      if (pad == '\0')
+		{
+		  /* Premature EOS.  */
+		  __set_errno (EINVAL);
+		  return -1;
+		}
+	      continue;
+	    case '^':			/* Don't group digits.  */
+	      group = 0;
+	      continue;
+	    case '+':			/* Use +/- for sign of number.  */
+	      if (n_sign_posn != -2)
+		{
+		  __set_errno (EINVAL);
+		  return -1;
+		}
+	      p_sign_posn = *_NL_CURRENT (LC_MONETARY, P_SIGN_POSN);
+	      n_sign_posn = *_NL_CURRENT (LC_MONETARY, N_SIGN_POSN);
+	      continue;
+	    case '(':			/* Use ( ) for negative sign.  */
+	      if (n_sign_posn != -2)
+		{
+		  __set_errno (EINVAL);
+		  return -1;
+		}
+	      p_sign_posn = 0;
+	      n_sign_posn = 0;
+	      continue;
+	    case '!':			/* Don't print the currency symbol.  */
+	      print_curr_symbol = 0;
+	      continue;
+	    case '-':			/* Print left justified.  */
+	      left = 1;
+	      continue;
+	    default:
+	      /* Will stop the loop.  */;
+	    }
+	  break;
+	}
+
+      if (isdigit (*fmt))
+	{
+	  /* Parse field width.  */
+	  width = to_digit (*fmt);
+
+	  while (isdigit (*++fmt))
+	    {
+	      int val = to_digit (*fmt);
+
+	      if (width > LONG_MAX / 10
+		  || (width == LONG_MAX && val > LONG_MAX % 10))
+		{
+		  __set_errno (E2BIG);
+		  return -1;
+		}
+
+	      width = width * 10 + val;
+	    }
+
+	  /* If we don't have enough room for the demanded width we
+	     can stop now and return an error.  */
+	  if (width >= maxsize - (dest - s))
+	    {
+	      __set_errno (E2BIG);
+	      return -1;
+	    }
+	}
+
+      /* Recognize left precision.  */
+      if (*fmt == '#')
+	{
+	  if (!isdigit (*++fmt))
+	    {
+	      __set_errno (EINVAL);
+	      return -1;
+	    }
+	  left_prec = to_digit (*fmt);
+
+	  while (isdigit (*++fmt))
+	    {
+	      left_prec *= 10;
+	      left_prec += to_digit (*fmt);
+	    }
+	}
+
+      /* Recognize right precision.  */
+      if (*fmt == '.')
+	{
+	  if (!isdigit (*++fmt))
+	    {
+	      __set_errno (EINVAL);
+	      return -1;
+	    }
+	  right_prec = to_digit (*fmt);
+
+	  while (isdigit (*++fmt))
+	    {
+	      right_prec *= 10;
+	      right_prec += to_digit (*fmt);
+	    }
+	}
+
+      /* Handle modifier.  This is an extension.  */
+      if (*fmt == 'L')
+	{
+	  ++fmt;
+	  if (!__ldbl_is_dbl)
+	    is_long_double = 1;
+	}
+
+      /* Handle format specifier.  */
+      char int_symbol[4];
+      switch (*fmt++)
+	{
+	case 'i': {		/* Use international currency symbol.  */
+	  const char *int_curr_symbol;
+
+	  int_curr_symbol = _NL_CURRENT (LC_MONETARY, INT_CURR_SYMBOL);
+	  strncpy(int_symbol, int_curr_symbol, 3);
+	  int_symbol[3] = '\0';
+
+	  currency_symbol_len = 3;
+	  currency_symbol = &int_symbol[0];
+	  space_char = int_curr_symbol[3];
+	  int_format = 1;
+	  break;
+	}
+	case 'n':		/* Use national currency symbol.  */
+	  currency_symbol = _NL_CURRENT (LC_MONETARY, CURRENCY_SYMBOL);
+	  currency_symbol_len = strlen (currency_symbol);
+	  space_char = ' ';
+	  int_format = 0;
+	  break;
+	default:		/* Any unrecognized format is an error.  */
+	  __set_errno (EINVAL);
+	  return -1;
+	}
+
+      /* If not specified by the format string now find the values for
+	 the format specification.  */
+      if (p_sign_posn == -2)
+	p_sign_posn = *_NL_CURRENT (LC_MONETARY, int_format ? INT_P_SIGN_POSN : P_SIGN_POSN);
+      if (n_sign_posn == -2)
+	n_sign_posn = *_NL_CURRENT (LC_MONETARY, int_format ? INT_N_SIGN_POSN : N_SIGN_POSN);
+
+      if (right_prec == -1)
+	{
+	  right_prec = *_NL_CURRENT (LC_MONETARY, int_format ? INT_FRAC_DIGITS : FRAC_DIGITS);
+
+	  if (right_prec == '\377')
+	    right_prec = 2;
+	}
+
+      /* If we have to print the digits grouped determine how many
+	 extra characters this means.  */
+      if (group && left_prec != -1)
+	left_prec += __guess_grouping (left_prec,
+				       _NL_CURRENT (LC_MONETARY, MON_GROUPING),
+				       *_NL_CURRENT (LC_MONETARY,
+						     MON_THOUSANDS_SEP));
+
+      /* Now it's time to get the value.  */
+      if (is_long_double == 1)
+	{
+	  fpnum.ldbl = va_arg (ap, long double);
+	  is_negative = fpnum.ldbl < 0;
+	  if (is_negative)
+	    fpnum.ldbl = -fpnum.ldbl;
+	}
+      else
+	{
+	  fpnum.dbl = va_arg (ap, double);
+	  is_negative = fpnum.dbl < 0;
+	  if (is_negative)
+	    fpnum.dbl = -fpnum.dbl;
+	}
+
+      /* We now know the sign of the value and can determine the format.  */
+      if (is_negative)
+	{
+	  sign_string = _NL_CURRENT (LC_MONETARY, NEGATIVE_SIGN);
+	  /* If the locale does not specify a character for the
+	     negative sign we use a '-'.  */
+	  if (*sign_string == '\0')
+	    sign_string = (const char *) "-";
+	  cs_precedes = *_NL_CURRENT (LC_MONETARY, int_format ? INT_N_CS_PRECEDES : N_CS_PRECEDES);
+	  sep_by_space = *_NL_CURRENT (LC_MONETARY, int_format ? INT_N_SEP_BY_SPACE : N_SEP_BY_SPACE);
+	  sign_posn = n_sign_posn;
+
+	  other_sign_string = _NL_CURRENT (LC_MONETARY, POSITIVE_SIGN);
+	  other_cs_precedes = *_NL_CURRENT (LC_MONETARY, int_format ? INT_P_CS_PRECEDES : P_CS_PRECEDES);
+	  other_sep_by_space = *_NL_CURRENT (LC_MONETARY, int_format ? INT_P_SEP_BY_SPACE : P_SEP_BY_SPACE);
+	  other_sign_posn = p_sign_posn;
+	}
+      else
+	{
+	  sign_string = _NL_CURRENT (LC_MONETARY, POSITIVE_SIGN);
+	  cs_precedes = *_NL_CURRENT (LC_MONETARY, int_format ? INT_P_CS_PRECEDES : P_CS_PRECEDES);
+	  sep_by_space = *_NL_CURRENT (LC_MONETARY, int_format ? INT_P_SEP_BY_SPACE : P_SEP_BY_SPACE);
+	  sign_posn = p_sign_posn;
+
+	  other_sign_string = _NL_CURRENT (LC_MONETARY, NEGATIVE_SIGN);
+	  if (*other_sign_string == '\0')
+	    other_sign_string = (const char *) "-";
+	  other_cs_precedes = *_NL_CURRENT (LC_MONETARY, int_format ? INT_N_CS_PRECEDES : N_CS_PRECEDES);
+	  other_sep_by_space = *_NL_CURRENT (LC_MONETARY, int_format ? INT_N_SEP_BY_SPACE : N_SEP_BY_SPACE);
+	  other_sign_posn = n_sign_posn;
+	}
+
+      /* Set default values for unspecified information.  */
+      if (cs_precedes != 0)
+	cs_precedes = 1;
+      if (other_cs_precedes != 0)
+	other_cs_precedes = 1;
+      if (sep_by_space == '\377')
+	sep_by_space = 0;
+      if (other_sep_by_space == '\377')
+	other_sep_by_space = 0;
+      if (sign_posn == '\377')
+	sign_posn = 1;
+      if (other_sign_posn == '\377')
+	other_sign_posn = 1;
+
+      /* Check for degenerate cases */
+      if (sep_by_space == 2)
+	{
+	  if (sign_posn == 0 ||
+	      (sign_posn == 1 && !cs_precedes) ||
+	      (sign_posn == 2 && cs_precedes))
+	    /* sign and symbol are not adjacent, so no separator */
+	    sep_by_space = 0;
+	}
+      if (other_sep_by_space == 2)
+	{
+	  if (other_sign_posn == 0 ||
+	      (other_sign_posn == 1 && !other_cs_precedes) ||
+	      (other_sign_posn == 2 && other_cs_precedes))
+	    /* sign and symbol are not adjacent, so no separator */
+	    other_sep_by_space = 0;
+	}
+
+      /* Set the left precision and padding needed for alignment */
+      if (left_prec == -1)
+	{
+	  left_prec = 0;
+	  left_pad = 0;
+	}
+      else
+	{
+	  /* Set left_pad to number of spaces needed to align positive
+	     and negative formats */
+
+	  int left_bytes = 0;
+	  int other_left_bytes = 0;
+
+	  /* Work out number of bytes for currency string and separator
+	     preceding the value */
+	  if (cs_precedes)
+	    {
+	      left_bytes += currency_symbol_len;
+	      if (sep_by_space != 0)
+		++left_bytes;
+	    }
+
+	  if (other_cs_precedes)
+	    {
+	      other_left_bytes += currency_symbol_len;
+	      if (other_sep_by_space != 0)
+		++other_left_bytes;
+	    }
+
+	  /* Work out number of bytes for the sign (or left parenthesis)
+	     preceding the value */
+	  if (sign_posn == 0 && is_negative)
+	    ++left_bytes;
+	  else if (sign_posn == 1)
+	    left_bytes += strlen (sign_string);
+	  else if (cs_precedes && (sign_posn == 3 || sign_posn == 4))
+	    left_bytes += strlen (sign_string);
+
+	  if (other_sign_posn == 0 && !is_negative)
+	    ++other_left_bytes;
+	  else if (other_sign_posn == 1)
+	    other_left_bytes += strlen (other_sign_string);
+	  else if (other_cs_precedes &&
+		   (other_sign_posn == 3 || other_sign_posn == 4))
+	    other_left_bytes += strlen (other_sign_string);
+
+	  /* Compare the number of bytes preceding the value for
+	     each format, and set the padding accordingly */
+	  if (other_left_bytes > left_bytes)
+	    left_pad = other_left_bytes - left_bytes;
+	  else
+	    left_pad = 0;
+	}
+
+      /* Perhaps we'll someday make these things configurable so
+	 better start using symbolic names now.  */
+#define left_paren '('
+#define right_paren ')'
+
+      startp = dest;		/* Remember start so we can compute length.  */
+
+      while (left_pad-- > 0)
+	out_char (' ');
+
+      if (sign_posn == 0 && is_negative)
+	out_char (left_paren);
+
+      if (cs_precedes)
+	{
+	  if (sign_posn != 0 && sign_posn != 2 && sign_posn != 4
+	      && sign_posn != 5)
+	    {
+	      out_string (sign_string);
+	      if (sep_by_space == 2)
+		out_char (' ');
+	    }
+
+	  if (print_curr_symbol)
+	    out_string (currency_symbol);
+
+	  if (sign_posn == 4)
+	    {
+	      if (print_curr_symbol && sep_by_space == 2)
+		out_char (space_char);
+	      out_string (sign_string);
+	      if (sep_by_space == 1)
+		/* POSIX.2 and SUS are not clear on this case, but C99
+		   says a space follows the adjacent-symbol-and-sign */
+		out_char (' ');
+	    }
+	  else
+	    if (print_curr_symbol && sep_by_space == 1)
+	      out_char (space_char);
+	}
+      else
+	if (sign_posn != 0 && sign_posn != 2 && sign_posn != 3
+	    && sign_posn != 4 && sign_posn != 5)
+	  out_string (sign_string);
+
+      /* Print the number.  */
+#ifdef _IO_MTSAFE_IO
+      f._sbf._f._lock = NULL;
+#endif
+      _IO_init_internal (&f._sbf._f, 0);
+      _IO_JUMPS (&f._sbf) = &_IO_str_jumps;
+      _IO_str_init_static_internal (&f, dest, (s + maxsize) - dest, dest);
+      /* We clear the last available byte so we can find out whether
+	 the numeric representation is too long.  */
+      s[maxsize - 1] = '\0';
+
+      memset (&info, '\0', sizeof (info));
+      info.prec = right_prec;
+      info.width = left_prec + (right_prec ? (right_prec + 1) : 0);
+      info.spec = 'f';
+      info.is_long_double = is_long_double;
+      info.group = group;
+      info.pad = pad;
+      info.extra = 1;		/* This means use values from LC_MONETARY.  */
+
+      ptr = &fpnum;
+      done = __printf_fp_l (&f._sbf._f, loc, &info, &ptr);
+      if (done < 0)
+	return -1;
+
+      if (s[maxsize - 1] != '\0')
+	{
+	  __set_errno (E2BIG);
+	  return -1;
+	}
+
+      dest += done;
+
+      if (!cs_precedes)
+	{
+	  if (sign_posn == 3)
+	    {
+	      if (sep_by_space == 1)
+		out_char (' ');
+	      out_string (sign_string);
+	    }
+
+	  if (print_curr_symbol)
+	    {
+	      if ((sign_posn == 3 && sep_by_space == 2)
+		  || (sign_posn == 4 && sep_by_space == 1)
+		  || (sign_posn == 2 && sep_by_space == 1)
+		  || (sign_posn == 1 && sep_by_space == 1)
+		  || (sign_posn == 0 && sep_by_space == 1))
+		out_char (space_char);
+	      out_nstring (currency_symbol, currency_symbol_len);
+	    }
+
+	  if (sign_posn == 4)
+	    {
+	      if (sep_by_space == 2)
+		out_char (' ');
+	      out_string (sign_string);
+	    }
+	}
+
+      if (sign_posn == 2)
+	{
+	  if (sep_by_space == 2)
+	    out_char (' ');
+	  out_string (sign_string);
+	}
+
+      if (sign_posn == 0 && is_negative)
+	out_char (right_paren);
+
+      /* Now test whether the output width is filled.  */
+      if (dest - startp < width)
+	{
+	  if (left)
+	    /* We simply have to fill using spaces.  */
+	    do
+	      out_char (' ');
+	    while (dest - startp < width);
+	  else
+	    {
+	      long int dist = width - (dest - startp);
+	      for (char *cp = dest - 1; cp >= startp; --cp)
+		cp[dist] = cp[0];
+
+	      dest += dist;
+
+	      do
+		startp[--dist] = ' ';
+	      while (dist > 0);
+	    }
+	}
+    }
+
+  /* Terminate the string.  */
+  *dest = '\0';
+
+  return dest - s;
+}
+
+ssize_t
+___strfmon_l (char *s, size_t maxsize, __locale_t loc, const char *format, ...)
+{
+  va_list ap;
+
+  va_start (ap, format);
+
+  ssize_t res = __vstrfmon_l (s, maxsize, loc, format, ap);
+
+  va_end (ap);
+
+  return res;
+}
+ldbl_strong_alias (___strfmon_l, __strfmon_l)
+ldbl_weak_alias (___strfmon_l, strfmon_l)
diff --git a/REORG.TODO/stdlib/strfrom-skeleton.c b/REORG.TODO/stdlib/strfrom-skeleton.c
new file mode 100644
index 0000000000..5841919fe4
--- /dev/null
+++ b/REORG.TODO/stdlib/strfrom-skeleton.c
@@ -0,0 +1,155 @@
+/* Convert a floating-point number to string.
+   Copyright (C) 2016-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* Generic implementation for strfrom functions.  The implementation is generic
+   for several floating-point types (e.g.: float, double), so that each
+   function, such as strfromf and strfroml, share the same code, thus avoiding
+   code duplication.  */
+
+#include <ctype.h>
+#include "../libio/libioP.h"
+#include "../libio/strfile.h"
+#include <printf.h>
+#include <string.h>
+#include <locale/localeinfo.h>
+
+#define UCHAR_T char
+#define L_(Str) Str
+#define ISDIGIT(Ch) isdigit (Ch)
+#include "stdio-common/printf-parse.h"
+
+int
+STRFROM (char *dest, size_t size, const char *format, FLOAT f)
+{
+  _IO_strnfile sfile;
+#ifdef _IO_MTSAFE_IO
+  sfile.f._sbf._f._lock = NULL;
+#endif
+
+  int done;
+
+  /* Single-precision values need to be stored in a double type, because
+     __printf_fp_l and __printf_fphex do not accept the float type.  */
+  union {
+    double flt;
+    FLOAT value;
+  } fpnum;
+  const void *fpptr;
+  fpptr = &fpnum;
+
+  /* Variables to control the output format.  */
+  int precision = -1; /* printf_fp and printf_fphex treat this internally.  */
+  int specifier;
+  struct printf_info info;
+
+  /* Single-precision values need to be converted into double-precision,
+     because __printf_fp and __printf_fphex only accept double and long double
+     as the floating-point argument.  */
+  if (__builtin_types_compatible_p (FLOAT, float))
+    fpnum.flt = f;
+  else
+    fpnum.value = f;
+
+  /* Check if the first character in the format string is indeed the '%'
+     character.  Otherwise, abort.  */
+  if (*format == '%')
+    format++;
+  else
+    abort ();
+
+  /* The optional precision specification always starts with a '.'.  If such
+     character is present, read the precision.  */
+  if (*format == '.')
+    {
+      format++;
+
+      /* Parse the precision.  */
+      if (ISDIGIT (*format))
+	precision = read_int (&format);
+      /* If only the period is specified, the precision is taken as zero, as
+	 described in ISO/IEC 9899:2011, section 7.21.6.1, 4th paragraph, 3rd
+	 item.  */
+      else
+	precision = 0;
+    }
+
+  /* Now there is only the conversion specifier to be read.  */
+  switch (*format)
+    {
+    case 'a':
+    case 'A':
+    case 'e':
+    case 'E':
+    case 'f':
+    case 'F':
+    case 'g':
+    case 'G':
+      specifier = *format;
+      break;
+    default:
+      abort ();
+    }
+
+  /* The following code to prepare the virtual file has been adapted from the
+     function _IO_vsnprintf from libio.  */
+
+  if (size == 0)
+    {
+    /* When size is zero, nothing is written and dest may be a null pointer.
+       This is specified for snprintf in ISO/IEC 9899:2011, Section 7.21.6.5,
+       in the second paragraph.  Thus, if size is zero, prepare to use the
+       overflow buffer right from the start.  */
+      dest = sfile.overflow_buf;
+      size = sizeof (sfile.overflow_buf);
+    }
+
+  /* Prepare the virtual string file.  */
+  _IO_no_init (&sfile.f._sbf._f, _IO_USER_LOCK, -1, NULL, NULL);
+  _IO_JUMPS (&sfile.f._sbf) = &_IO_strn_jumps;
+  _IO_str_init_static_internal (&sfile.f, dest, size - 1, dest);
+
+  /* Prepare the format specification for printf_fp.  */
+  memset (&info, '\0', sizeof (info));
+
+  /* The functions strfromd and strfromf pass a floating-point number with
+     double precision to printf_fp, whereas strfroml passes a floating-point
+     number with long double precision.  The following line informs printf_fp
+     which type of floating-point number is being passed.  */
+  info.is_long_double = __builtin_types_compatible_p (FLOAT, long double);
+
+  /* Similarly, the function strfromf128 passes a floating-point number in
+     _Float128 format to printf_fp.  */
+#if __HAVE_DISTINCT_FLOAT128
+  info.is_binary128 = __builtin_types_compatible_p (FLOAT, _Float128);
+#endif
+
+  /* Set info according to the format string.  */
+  info.prec = precision;
+  info.spec = specifier;
+
+  if (info.spec != 'a' && info.spec != 'A')
+    done = __printf_fp_l (&sfile.f._sbf._f, _NL_CURRENT_LOCALE, &info, &fpptr);
+  else
+    done = __printf_fphex (&sfile.f._sbf._f, &info, &fpptr);
+
+  /* Terminate the string.  */
+  if (sfile.f._sbf._f._IO_buf_base != sfile.overflow_buf)
+    *sfile.f._sbf._f._IO_write_ptr = '\0';
+
+  return done;
+}
diff --git a/REORG.TODO/stdlib/strfromd.c b/REORG.TODO/stdlib/strfromd.c
new file mode 100644
index 0000000000..5342059008
--- /dev/null
+++ b/REORG.TODO/stdlib/strfromd.c
@@ -0,0 +1,22 @@
+/* Definitions for strfromd.  Implementation in stdlib/strfrom-skeleton.c.
+   Copyright (C) 2016-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#define FLOAT		double
+#define STRFROM		strfromd
+
+#include "strfrom-skeleton.c"
diff --git a/REORG.TODO/stdlib/strfromf.c b/REORG.TODO/stdlib/strfromf.c
new file mode 100644
index 0000000000..20c674414d
--- /dev/null
+++ b/REORG.TODO/stdlib/strfromf.c
@@ -0,0 +1,22 @@
+/* Definitions for strfromf.  Implementation in stdlib/strfrom-skeleton.c.
+   Copyright (C) 2016-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#define FLOAT		float
+#define STRFROM		strfromf
+
+#include "strfrom-skeleton.c"
diff --git a/REORG.TODO/stdlib/strfroml.c b/REORG.TODO/stdlib/strfroml.c
new file mode 100644
index 0000000000..f8c8a4fcc5
--- /dev/null
+++ b/REORG.TODO/stdlib/strfroml.c
@@ -0,0 +1,22 @@
+/* Definitions for strfroml.  Implementation in stdlib/strfrom-skeleton.c.
+   Copyright (C) 2016-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#define FLOAT		long double
+#define STRFROM		strfroml
+
+#include "strfrom-skeleton.c"
diff --git a/REORG.TODO/stdlib/strtod.c b/REORG.TODO/stdlib/strtod.c
new file mode 100644
index 0000000000..2ac1b2e57a
--- /dev/null
+++ b/REORG.TODO/stdlib/strtod.c
@@ -0,0 +1,80 @@
+/* Read decimal floating point numbers.
+   This file is part of the GNU C Library.
+   Copyright (C) 1995-2017 Free Software Foundation, Inc.
+   Contributed by Ulrich Drepper <drepper@gnu.org>, 1995.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <stdlib.h>
+#include <wchar.h>
+#include <locale/localeinfo.h>
+
+
+#ifndef FLOAT
+# include <math_ldbl_opt.h>
+# define FLOAT double
+# ifdef USE_WIDE_CHAR
+#  define STRTOF wcstod
+#  define STRTOF_L __wcstod_l
+# else
+#  define STRTOF strtod
+#  define STRTOF_L __strtod_l
+# endif
+#endif
+
+#ifdef USE_WIDE_CHAR
+# include <wctype.h>
+# define STRING_TYPE wchar_t
+#else
+# define STRING_TYPE char
+#endif
+
+#define INTERNAL(x) INTERNAL1(x)
+#define INTERNAL1(x) __##x##_internal
+
+
+FLOAT
+INTERNAL (STRTOF) (const STRING_TYPE *nptr, STRING_TYPE **endptr, int group)
+{
+  return INTERNAL(STRTOF_L) (nptr, endptr, group, _NL_CURRENT_LOCALE);
+}
+#if defined _LIBC
+libc_hidden_def (INTERNAL (STRTOF))
+#endif
+
+
+FLOAT
+#ifdef weak_function
+weak_function
+#endif
+STRTOF (const STRING_TYPE *nptr, STRING_TYPE **endptr)
+{
+  return INTERNAL(STRTOF_L) (nptr, endptr, 0, _NL_CURRENT_LOCALE);
+}
+#if defined _LIBC
+libc_hidden_def (STRTOF)
+#endif
+
+#ifdef LONG_DOUBLE_COMPAT
+# if LONG_DOUBLE_COMPAT(libc, GLIBC_2_0)
+#  ifdef USE_WIDE_CHAR
+compat_symbol (libc, wcstod, wcstold, GLIBC_2_0);
+compat_symbol (libc, __wcstod_internal, __wcstold_internal, GLIBC_2_0);
+#  else
+compat_symbol (libc, strtod, strtold, GLIBC_2_0);
+compat_symbol (libc, __strtod_internal, __strtold_internal, GLIBC_2_0);
+#  endif
+# endif
+#endif
diff --git a/REORG.TODO/stdlib/strtod_l.c b/REORG.TODO/stdlib/strtod_l.c
new file mode 100644
index 0000000000..99c2af357e
--- /dev/null
+++ b/REORG.TODO/stdlib/strtod_l.c
@@ -0,0 +1,1787 @@
+/* Convert string representing a number to float value, using given locale.
+   Copyright (C) 1997-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <xlocale.h>
+
+extern double ____strtod_l_internal (const char *, char **, int, __locale_t);
+
+/* Configuration part.  These macros are defined by `strtold.c',
+   `strtof.c', `wcstod.c', `wcstold.c', and `wcstof.c' to produce the
+   `long double' and `float' versions of the reader.  */
+#ifndef FLOAT
+# include <math_ldbl_opt.h>
+# define FLOAT		double
+# define FLT		DBL
+# ifdef USE_WIDE_CHAR
+#  define STRTOF	wcstod_l
+#  define __STRTOF	__wcstod_l
+#  define STRTOF_NAN	__wcstod_nan
+# else
+#  define STRTOF	strtod_l
+#  define __STRTOF	__strtod_l
+#  define STRTOF_NAN	__strtod_nan
+# endif
+# define MPN2FLOAT	__mpn_construct_double
+# define FLOAT_HUGE_VAL	HUGE_VAL
+#endif
+/* End of configuration part.  */
+
+#include <ctype.h>
+#include <errno.h>
+#include <float.h>
+#include "../locale/localeinfo.h"
+#include <locale.h>
+#include <math.h>
+#include <math_private.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdint.h>
+#include <rounding-mode.h>
+#include <tininess.h>
+
+/* The gmp headers need some configuration frobs.  */
+#define HAVE_ALLOCA 1
+
+/* Include gmp-mparam.h first, such that definitions of _SHORT_LIMB
+   and _LONG_LONG_LIMB in it can take effect into gmp.h.  */
+#include <gmp-mparam.h>
+#include <gmp.h>
+#include "gmp-impl.h"
+#include "longlong.h"
+#include "fpioconst.h"
+
+#include <assert.h>
+
+
+/* We use this code for the extended locale handling where the
+   function gets as an additional argument the locale which has to be
+   used.  To access the values we have to redefine the _NL_CURRENT and
+   _NL_CURRENT_WORD macros.  */
+#undef _NL_CURRENT
+#define _NL_CURRENT(category, item) \
+  (current->values[_NL_ITEM_INDEX (item)].string)
+#undef _NL_CURRENT_WORD
+#define _NL_CURRENT_WORD(category, item) \
+  ((uint32_t) current->values[_NL_ITEM_INDEX (item)].word)
+
+#if defined _LIBC || defined HAVE_WCHAR_H
+# include <wchar.h>
+#endif
+
+#ifdef USE_WIDE_CHAR
+# include <wctype.h>
+# define STRING_TYPE wchar_t
+# define CHAR_TYPE wint_t
+# define L_(Ch) L##Ch
+# define ISSPACE(Ch) __iswspace_l ((Ch), loc)
+# define ISDIGIT(Ch) __iswdigit_l ((Ch), loc)
+# define ISXDIGIT(Ch) __iswxdigit_l ((Ch), loc)
+# define TOLOWER(Ch) __towlower_l ((Ch), loc)
+# define TOLOWER_C(Ch) __towlower_l ((Ch), _nl_C_locobj_ptr)
+# define STRNCASECMP(S1, S2, N) \
+  __wcsncasecmp_l ((S1), (S2), (N), _nl_C_locobj_ptr)
+#else
+# define STRING_TYPE char
+# define CHAR_TYPE char
+# define L_(Ch) Ch
+# define ISSPACE(Ch) __isspace_l ((Ch), loc)
+# define ISDIGIT(Ch) __isdigit_l ((Ch), loc)
+# define ISXDIGIT(Ch) __isxdigit_l ((Ch), loc)
+# define TOLOWER(Ch) __tolower_l ((Ch), loc)
+# define TOLOWER_C(Ch) __tolower_l ((Ch), _nl_C_locobj_ptr)
+# define STRNCASECMP(S1, S2, N) \
+  __strncasecmp_l ((S1), (S2), (N), _nl_C_locobj_ptr)
+#endif
+
+
+/* Constants we need from float.h; select the set for the FLOAT precision.  */
+#define MANT_DIG	PASTE(FLT,_MANT_DIG)
+#define	DIG		PASTE(FLT,_DIG)
+#define	MAX_EXP		PASTE(FLT,_MAX_EXP)
+#define	MIN_EXP		PASTE(FLT,_MIN_EXP)
+#define MAX_10_EXP	PASTE(FLT,_MAX_10_EXP)
+#define MIN_10_EXP	PASTE(FLT,_MIN_10_EXP)
+#define MAX_VALUE	PASTE(FLT,_MAX)
+#define MIN_VALUE	PASTE(FLT,_MIN)
+
+/* Extra macros required to get FLT expanded before the pasting.  */
+#define PASTE(a,b)	PASTE1(a,b)
+#define PASTE1(a,b)	a##b
+
+/* Function to construct a floating point number from an MP integer
+   containing the fraction bits, a base 2 exponent, and a sign flag.  */
+extern FLOAT MPN2FLOAT (mp_srcptr mpn, int exponent, int negative);
+
+/* Definitions according to limb size used.  */
+#if	BITS_PER_MP_LIMB == 32
+# define MAX_DIG_PER_LIMB	9
+# define MAX_FAC_PER_LIMB	1000000000UL
+#elif	BITS_PER_MP_LIMB == 64
+# define MAX_DIG_PER_LIMB	19
+# define MAX_FAC_PER_LIMB	10000000000000000000ULL
+#else
+# error "mp_limb_t size " BITS_PER_MP_LIMB "not accounted for"
+#endif
+
+extern const mp_limb_t _tens_in_limb[MAX_DIG_PER_LIMB + 1];
+
+#ifndef	howmany
+#define	howmany(x,y)		(((x)+((y)-1))/(y))
+#endif
+#define SWAP(x, y)		({ typeof(x) _tmp = x; x = y; y = _tmp; })
+
+#define	RETURN_LIMB_SIZE		howmany (MANT_DIG, BITS_PER_MP_LIMB)
+
+#define RETURN(val,end)							      \
+    do { if (endptr != NULL) *endptr = (STRING_TYPE *) (end);		      \
+	 return val; } while (0)
+
+/* Maximum size necessary for mpn integers to hold floating point
+   numbers.  The largest number we need to hold is 10^n where 2^-n is
+   1/4 ulp of the smallest representable value (that is, n = MANT_DIG
+   - MIN_EXP + 2).  Approximate using 10^3 < 2^10.  */
+#define	MPNSIZE		(howmany (1 + ((MANT_DIG - MIN_EXP + 2) * 10) / 3, \
+				  BITS_PER_MP_LIMB) + 2)
+/* Declare an mpn integer variable that big.  */
+#define	MPN_VAR(name)	mp_limb_t name[MPNSIZE]; mp_size_t name##size
+/* Copy an mpn integer value.  */
+#define MPN_ASSIGN(dst, src) \
+	memcpy (dst, src, (dst##size = src##size) * sizeof (mp_limb_t))
+
+
+/* Set errno and return an overflowing value with sign specified by
+   NEGATIVE.  */
+static FLOAT
+overflow_value (int negative)
+{
+  __set_errno (ERANGE);
+  FLOAT result = math_narrow_eval ((negative ? -MAX_VALUE : MAX_VALUE)
+				   * MAX_VALUE);
+  return result;
+}
+
+
+/* Set errno and return an underflowing value with sign specified by
+   NEGATIVE.  */
+static FLOAT
+underflow_value (int negative)
+{
+  __set_errno (ERANGE);
+  FLOAT result = math_narrow_eval ((negative ? -MIN_VALUE : MIN_VALUE)
+				   * MIN_VALUE);
+  return result;
+}
+
+
+/* Return a floating point number of the needed type according to the given
+   multi-precision number after possible rounding.  */
+static FLOAT
+round_and_return (mp_limb_t *retval, intmax_t exponent, int negative,
+		  mp_limb_t round_limb, mp_size_t round_bit, int more_bits)
+{
+  int mode = get_rounding_mode ();
+
+  if (exponent < MIN_EXP - 1)
+    {
+      if (exponent < MIN_EXP - 1 - MANT_DIG)
+	return underflow_value (negative);
+
+      mp_size_t shift = MIN_EXP - 1 - exponent;
+      bool is_tiny = true;
+
+      more_bits |= (round_limb & ((((mp_limb_t) 1) << round_bit) - 1)) != 0;
+      if (shift == MANT_DIG)
+	/* This is a special case to handle the very seldom case where
+	   the mantissa will be empty after the shift.  */
+	{
+	  int i;
+
+	  round_limb = retval[RETURN_LIMB_SIZE - 1];
+	  round_bit = (MANT_DIG - 1) % BITS_PER_MP_LIMB;
+	  for (i = 0; i < RETURN_LIMB_SIZE - 1; ++i)
+	    more_bits |= retval[i] != 0;
+	  MPN_ZERO (retval, RETURN_LIMB_SIZE);
+	}
+      else if (shift >= BITS_PER_MP_LIMB)
+	{
+	  int i;
+
+	  round_limb = retval[(shift - 1) / BITS_PER_MP_LIMB];
+	  round_bit = (shift - 1) % BITS_PER_MP_LIMB;
+	  for (i = 0; i < (shift - 1) / BITS_PER_MP_LIMB; ++i)
+	    more_bits |= retval[i] != 0;
+	  more_bits |= ((round_limb & ((((mp_limb_t) 1) << round_bit) - 1))
+			!= 0);
+
+	  /* __mpn_rshift requires 0 < shift < BITS_PER_MP_LIMB.  */
+	  if ((shift % BITS_PER_MP_LIMB) != 0)
+	    (void) __mpn_rshift (retval, &retval[shift / BITS_PER_MP_LIMB],
+			         RETURN_LIMB_SIZE - (shift / BITS_PER_MP_LIMB),
+			         shift % BITS_PER_MP_LIMB);
+	  else
+	    for (i = 0; i < RETURN_LIMB_SIZE - (shift / BITS_PER_MP_LIMB); i++)
+	      retval[i] = retval[i + (shift / BITS_PER_MP_LIMB)];
+	  MPN_ZERO (&retval[RETURN_LIMB_SIZE - (shift / BITS_PER_MP_LIMB)],
+		    shift / BITS_PER_MP_LIMB);
+	}
+      else if (shift > 0)
+	{
+	  if (TININESS_AFTER_ROUNDING && shift == 1)
+	    {
+	      /* Whether the result counts as tiny depends on whether,
+		 after rounding to the normal precision, it still has
+		 a subnormal exponent.  */
+	      mp_limb_t retval_normal[RETURN_LIMB_SIZE];
+	      if (round_away (negative,
+			      (retval[0] & 1) != 0,
+			      (round_limb
+			       & (((mp_limb_t) 1) << round_bit)) != 0,
+			      (more_bits
+			       || ((round_limb
+				    & ((((mp_limb_t) 1) << round_bit) - 1))
+				   != 0)),
+			      mode))
+		{
+		  mp_limb_t cy = __mpn_add_1 (retval_normal, retval,
+					      RETURN_LIMB_SIZE, 1);
+
+		  if (((MANT_DIG % BITS_PER_MP_LIMB) == 0 && cy) ||
+		      ((MANT_DIG % BITS_PER_MP_LIMB) != 0 &&
+		       ((retval_normal[RETURN_LIMB_SIZE - 1]
+			& (((mp_limb_t) 1) << (MANT_DIG % BITS_PER_MP_LIMB)))
+			!= 0)))
+		    is_tiny = false;
+		}
+	    }
+	  round_limb = retval[0];
+	  round_bit = shift - 1;
+	  (void) __mpn_rshift (retval, retval, RETURN_LIMB_SIZE, shift);
+	}
+      /* This is a hook for the m68k long double format, where the
+	 exponent bias is the same for normalized and denormalized
+	 numbers.  */
+#ifndef DENORM_EXP
+# define DENORM_EXP (MIN_EXP - 2)
+#endif
+      exponent = DENORM_EXP;
+      if (is_tiny
+	  && ((round_limb & (((mp_limb_t) 1) << round_bit)) != 0
+	      || more_bits
+	      || (round_limb & ((((mp_limb_t) 1) << round_bit) - 1)) != 0))
+	{
+	  __set_errno (ERANGE);
+	  FLOAT force_underflow = MIN_VALUE * MIN_VALUE;
+	  math_force_eval (force_underflow);
+	}
+    }
+
+  if (exponent > MAX_EXP)
+    goto overflow;
+
+  bool half_bit = (round_limb & (((mp_limb_t) 1) << round_bit)) != 0;
+  bool more_bits_nonzero
+    = (more_bits
+       || (round_limb & ((((mp_limb_t) 1) << round_bit) - 1)) != 0);
+  if (round_away (negative,
+		  (retval[0] & 1) != 0,
+		  half_bit,
+		  more_bits_nonzero,
+		  mode))
+    {
+      mp_limb_t cy = __mpn_add_1 (retval, retval, RETURN_LIMB_SIZE, 1);
+
+      if (((MANT_DIG % BITS_PER_MP_LIMB) == 0 && cy) ||
+	  ((MANT_DIG % BITS_PER_MP_LIMB) != 0 &&
+	   (retval[RETURN_LIMB_SIZE - 1]
+	    & (((mp_limb_t) 1) << (MANT_DIG % BITS_PER_MP_LIMB))) != 0))
+	{
+	  ++exponent;
+	  (void) __mpn_rshift (retval, retval, RETURN_LIMB_SIZE, 1);
+	  retval[RETURN_LIMB_SIZE - 1]
+	    |= ((mp_limb_t) 1) << ((MANT_DIG - 1) % BITS_PER_MP_LIMB);
+	}
+      else if (exponent == DENORM_EXP
+	       && (retval[RETURN_LIMB_SIZE - 1]
+		   & (((mp_limb_t) 1) << ((MANT_DIG - 1) % BITS_PER_MP_LIMB)))
+	       != 0)
+	  /* The number was denormalized but now normalized.  */
+	exponent = MIN_EXP - 1;
+    }
+
+  if (exponent > MAX_EXP)
+  overflow:
+    return overflow_value (negative);
+
+  if (half_bit || more_bits_nonzero)
+    {
+      FLOAT force_inexact = (FLOAT) 1 + MIN_VALUE;
+      math_force_eval (force_inexact);
+    }
+  return MPN2FLOAT (retval, exponent, negative);
+}
+
+
+/* Read a multi-precision integer starting at STR with exactly DIGCNT digits
+   into N.  Return the size of the number limbs in NSIZE at the first
+   character od the string that is not part of the integer as the function
+   value.  If the EXPONENT is small enough to be taken as an additional
+   factor for the resulting number (see code) multiply by it.  */
+static const STRING_TYPE *
+str_to_mpn (const STRING_TYPE *str, int digcnt, mp_limb_t *n, mp_size_t *nsize,
+	    intmax_t *exponent
+#ifndef USE_WIDE_CHAR
+	    , const char *decimal, size_t decimal_len, const char *thousands
+#endif
+
+	    )
+{
+  /* Number of digits for actual limb.  */
+  int cnt = 0;
+  mp_limb_t low = 0;
+  mp_limb_t start;
+
+  *nsize = 0;
+  assert (digcnt > 0);
+  do
+    {
+      if (cnt == MAX_DIG_PER_LIMB)
+	{
+	  if (*nsize == 0)
+	    {
+	      n[0] = low;
+	      *nsize = 1;
+	    }
+	  else
+	    {
+	      mp_limb_t cy;
+	      cy = __mpn_mul_1 (n, n, *nsize, MAX_FAC_PER_LIMB);
+	      cy += __mpn_add_1 (n, n, *nsize, low);
+	      if (cy != 0)
+		{
+		  assert (*nsize < MPNSIZE);
+		  n[*nsize] = cy;
+		  ++(*nsize);
+		}
+	    }
+	  cnt = 0;
+	  low = 0;
+	}
+
+      /* There might be thousands separators or radix characters in
+	 the string.  But these all can be ignored because we know the
+	 format of the number is correct and we have an exact number
+	 of characters to read.  */
+#ifdef USE_WIDE_CHAR
+      if (*str < L'0' || *str > L'9')
+	++str;
+#else
+      if (*str < '0' || *str > '9')
+	{
+	  int inner = 0;
+	  if (thousands != NULL && *str == *thousands
+	      && ({ for (inner = 1; thousands[inner] != '\0'; ++inner)
+		      if (thousands[inner] != str[inner])
+			break;
+		    thousands[inner] == '\0'; }))
+	    str += inner;
+	  else
+	    str += decimal_len;
+	}
+#endif
+      low = low * 10 + *str++ - L_('0');
+      ++cnt;
+    }
+  while (--digcnt > 0);
+
+  if (*exponent > 0 && *exponent <= MAX_DIG_PER_LIMB - cnt)
+    {
+      low *= _tens_in_limb[*exponent];
+      start = _tens_in_limb[cnt + *exponent];
+      *exponent = 0;
+    }
+  else
+    start = _tens_in_limb[cnt];
+
+  if (*nsize == 0)
+    {
+      n[0] = low;
+      *nsize = 1;
+    }
+  else
+    {
+      mp_limb_t cy;
+      cy = __mpn_mul_1 (n, n, *nsize, start);
+      cy += __mpn_add_1 (n, n, *nsize, low);
+      if (cy != 0)
+	{
+	  assert (*nsize < MPNSIZE);
+	  n[(*nsize)++] = cy;
+	}
+    }
+
+  return str;
+}
+
+
+/* Shift {PTR, SIZE} COUNT bits to the left, and fill the vacated bits
+   with the COUNT most significant bits of LIMB.
+
+   Implemented as a macro, so that __builtin_constant_p works even at -O0.
+
+   Tege doesn't like this macro so I have to write it here myself. :)
+   --drepper */
+#define __mpn_lshift_1(ptr, size, count, limb) \
+  do									\
+    {									\
+      mp_limb_t *__ptr = (ptr);						\
+      if (__builtin_constant_p (count) && count == BITS_PER_MP_LIMB)	\
+	{								\
+	  mp_size_t i;							\
+	  for (i = (size) - 1; i > 0; --i)				\
+	    __ptr[i] = __ptr[i - 1];					\
+	  __ptr[0] = (limb);						\
+	}								\
+      else								\
+	{								\
+	  /* We assume count > 0 && count < BITS_PER_MP_LIMB here.  */	\
+	  unsigned int __count = (count);				\
+	  (void) __mpn_lshift (__ptr, __ptr, size, __count);		\
+	  __ptr[0] |= (limb) >> (BITS_PER_MP_LIMB - __count);		\
+	}								\
+    }									\
+  while (0)
+
+
+#define INTERNAL(x) INTERNAL1(x)
+#define INTERNAL1(x) __##x##_internal
+#ifndef ____STRTOF_INTERNAL
+# define ____STRTOF_INTERNAL INTERNAL (__STRTOF)
+#endif
+
+/* This file defines a function to check for correct grouping.  */
+#include "grouping.h"
+
+
+/* Return a floating point number with the value of the given string NPTR.
+   Set *ENDPTR to the character after the last used one.  If the number is
+   smaller than the smallest representable number, set `errno' to ERANGE and
+   return 0.0.  If the number is too big to be represented, set `errno' to
+   ERANGE and return HUGE_VAL with the appropriate sign.  */
+FLOAT
+____STRTOF_INTERNAL (const STRING_TYPE *nptr, STRING_TYPE **endptr, int group,
+		     __locale_t loc)
+{
+  int negative;			/* The sign of the number.  */
+  MPN_VAR (num);		/* MP representation of the number.  */
+  intmax_t exponent;		/* Exponent of the number.  */
+
+  /* Numbers starting `0X' or `0x' have to be processed with base 16.  */
+  int base = 10;
+
+  /* When we have to compute fractional digits we form a fraction with a
+     second multi-precision number (and we sometimes need a second for
+     temporary results).  */
+  MPN_VAR (den);
+
+  /* Representation for the return value.  */
+  mp_limb_t retval[RETURN_LIMB_SIZE];
+  /* Number of bits currently in result value.  */
+  int bits;
+
+  /* Running pointer after the last character processed in the string.  */
+  const STRING_TYPE *cp, *tp;
+  /* Start of significant part of the number.  */
+  const STRING_TYPE *startp, *start_of_digits;
+  /* Points at the character following the integer and fractional digits.  */
+  const STRING_TYPE *expp;
+  /* Total number of digit and number of digits in integer part.  */
+  size_t dig_no, int_no, lead_zero;
+  /* Contains the last character read.  */
+  CHAR_TYPE c;
+
+/* We should get wint_t from <stddef.h>, but not all GCC versions define it
+   there.  So define it ourselves if it remains undefined.  */
+#ifndef _WINT_T
+  typedef unsigned int wint_t;
+#endif
+  /* The radix character of the current locale.  */
+#ifdef USE_WIDE_CHAR
+  wchar_t decimal;
+#else
+  const char *decimal;
+  size_t decimal_len;
+#endif
+  /* The thousands character of the current locale.  */
+#ifdef USE_WIDE_CHAR
+  wchar_t thousands = L'\0';
+#else
+  const char *thousands = NULL;
+#endif
+  /* The numeric grouping specification of the current locale,
+     in the format described in <locale.h>.  */
+  const char *grouping;
+  /* Used in several places.  */
+  int cnt;
+
+  struct __locale_data *current = loc->__locales[LC_NUMERIC];
+
+  if (__glibc_unlikely (group))
+    {
+      grouping = _NL_CURRENT (LC_NUMERIC, GROUPING);
+      if (*grouping <= 0 || *grouping == CHAR_MAX)
+	grouping = NULL;
+      else
+	{
+	  /* Figure out the thousands separator character.  */
+#ifdef USE_WIDE_CHAR
+	  thousands = _NL_CURRENT_WORD (LC_NUMERIC,
+					_NL_NUMERIC_THOUSANDS_SEP_WC);
+	  if (thousands == L'\0')
+	    grouping = NULL;
+#else
+	  thousands = _NL_CURRENT (LC_NUMERIC, THOUSANDS_SEP);
+	  if (*thousands == '\0')
+	    {
+	      thousands = NULL;
+	      grouping = NULL;
+	    }
+#endif
+	}
+    }
+  else
+    grouping = NULL;
+
+  /* Find the locale's decimal point character.  */
+#ifdef USE_WIDE_CHAR
+  decimal = _NL_CURRENT_WORD (LC_NUMERIC, _NL_NUMERIC_DECIMAL_POINT_WC);
+  assert (decimal != L'\0');
+# define decimal_len 1
+#else
+  decimal = _NL_CURRENT (LC_NUMERIC, DECIMAL_POINT);
+  decimal_len = strlen (decimal);
+  assert (decimal_len > 0);
+#endif
+
+  /* Prepare number representation.  */
+  exponent = 0;
+  negative = 0;
+  bits = 0;
+
+  /* Parse string to get maximal legal prefix.  We need the number of
+     characters of the integer part, the fractional part and the exponent.  */
+  cp = nptr - 1;
+  /* Ignore leading white space.  */
+  do
+    c = *++cp;
+  while (ISSPACE (c));
+
+  /* Get sign of the result.  */
+  if (c == L_('-'))
+    {
+      negative = 1;
+      c = *++cp;
+    }
+  else if (c == L_('+'))
+    c = *++cp;
+
+  /* Return 0.0 if no legal string is found.
+     No character is used even if a sign was found.  */
+#ifdef USE_WIDE_CHAR
+  if (c == (wint_t) decimal
+      && (wint_t) cp[1] >= L'0' && (wint_t) cp[1] <= L'9')
+    {
+      /* We accept it.  This funny construct is here only to indent
+	 the code correctly.  */
+    }
+#else
+  for (cnt = 0; decimal[cnt] != '\0'; ++cnt)
+    if (cp[cnt] != decimal[cnt])
+      break;
+  if (decimal[cnt] == '\0' && cp[cnt] >= '0' && cp[cnt] <= '9')
+    {
+      /* We accept it.  This funny construct is here only to indent
+	 the code correctly.  */
+    }
+#endif
+  else if (c < L_('0') || c > L_('9'))
+    {
+      /* Check for `INF' or `INFINITY'.  */
+      CHAR_TYPE lowc = TOLOWER_C (c);
+
+      if (lowc == L_('i') && STRNCASECMP (cp, L_("inf"), 3) == 0)
+	{
+	  /* Return +/- infinity.  */
+	  if (endptr != NULL)
+	    *endptr = (STRING_TYPE *)
+		      (cp + (STRNCASECMP (cp + 3, L_("inity"), 5) == 0
+			     ? 8 : 3));
+
+	  return negative ? -FLOAT_HUGE_VAL : FLOAT_HUGE_VAL;
+	}
+
+      if (lowc == L_('n') && STRNCASECMP (cp, L_("nan"), 3) == 0)
+	{
+	  /* Return NaN.  */
+	  FLOAT retval = NAN;
+
+	  cp += 3;
+
+	  /* Match `(n-char-sequence-digit)'.  */
+	  if (*cp == L_('('))
+	    {
+	      const STRING_TYPE *startp = cp;
+	      STRING_TYPE *endp;
+	      retval = STRTOF_NAN (cp + 1, &endp, L_(')'));
+	      if (*endp == L_(')'))
+		/* Consume the closing parenthesis.  */
+		cp = endp + 1;
+	      else
+		/* Only match the NAN part.  */
+		cp = startp;
+	    }
+
+	  if (endptr != NULL)
+	    *endptr = (STRING_TYPE *) cp;
+
+	  return retval;
+	}
+
+      /* It is really a text we do not recognize.  */
+      RETURN (0.0, nptr);
+    }
+
+  /* First look whether we are faced with a hexadecimal number.  */
+  if (c == L_('0') && TOLOWER (cp[1]) == L_('x'))
+    {
+      /* Okay, it is a hexa-decimal number.  Remember this and skip
+	 the characters.  BTW: hexadecimal numbers must not be
+	 grouped.  */
+      base = 16;
+      cp += 2;
+      c = *cp;
+      grouping = NULL;
+    }
+
+  /* Record the start of the digits, in case we will check their grouping.  */
+  start_of_digits = startp = cp;
+
+  /* Ignore leading zeroes.  This helps us to avoid useless computations.  */
+#ifdef USE_WIDE_CHAR
+  while (c == L'0' || ((wint_t) thousands != L'\0' && c == (wint_t) thousands))
+    c = *++cp;
+#else
+  if (__glibc_likely (thousands == NULL))
+    while (c == '0')
+      c = *++cp;
+  else
+    {
+      /* We also have the multibyte thousands string.  */
+      while (1)
+	{
+	  if (c != '0')
+	    {
+	      for (cnt = 0; thousands[cnt] != '\0'; ++cnt)
+		if (thousands[cnt] != cp[cnt])
+		  break;
+	      if (thousands[cnt] != '\0')
+		break;
+	      cp += cnt - 1;
+	    }
+	  c = *++cp;
+	}
+    }
+#endif
+
+  /* If no other digit but a '0' is found the result is 0.0.
+     Return current read pointer.  */
+  CHAR_TYPE lowc = TOLOWER (c);
+  if (!((c >= L_('0') && c <= L_('9'))
+	|| (base == 16 && lowc >= L_('a') && lowc <= L_('f'))
+	|| (
+#ifdef USE_WIDE_CHAR
+	    c == (wint_t) decimal
+#else
+	    ({ for (cnt = 0; decimal[cnt] != '\0'; ++cnt)
+		 if (decimal[cnt] != cp[cnt])
+		   break;
+	       decimal[cnt] == '\0'; })
+#endif
+	    /* '0x.' alone is not a valid hexadecimal number.
+	       '.' alone is not valid either, but that has been checked
+	       already earlier.  */
+	    && (base != 16
+		|| cp != start_of_digits
+		|| (cp[decimal_len] >= L_('0') && cp[decimal_len] <= L_('9'))
+		|| ({ CHAR_TYPE lo = TOLOWER (cp[decimal_len]);
+		      lo >= L_('a') && lo <= L_('f'); })))
+	|| (base == 16 && (cp != start_of_digits
+			   && lowc == L_('p')))
+	|| (base != 16 && lowc == L_('e'))))
+    {
+#ifdef USE_WIDE_CHAR
+      tp = __correctly_grouped_prefixwc (start_of_digits, cp, thousands,
+					 grouping);
+#else
+      tp = __correctly_grouped_prefixmb (start_of_digits, cp, thousands,
+					 grouping);
+#endif
+      /* If TP is at the start of the digits, there was no correctly
+	 grouped prefix of the string; so no number found.  */
+      RETURN (negative ? -0.0 : 0.0,
+	      tp == start_of_digits ? (base == 16 ? cp - 1 : nptr) : tp);
+    }
+
+  /* Remember first significant digit and read following characters until the
+     decimal point, exponent character or any non-FP number character.  */
+  startp = cp;
+  dig_no = 0;
+  while (1)
+    {
+      if ((c >= L_('0') && c <= L_('9'))
+	  || (base == 16
+	      && ({ CHAR_TYPE lo = TOLOWER (c);
+		    lo >= L_('a') && lo <= L_('f'); })))
+	++dig_no;
+      else
+	{
+#ifdef USE_WIDE_CHAR
+	  if (__builtin_expect ((wint_t) thousands == L'\0', 1)
+	      || c != (wint_t) thousands)
+	    /* Not a digit or separator: end of the integer part.  */
+	    break;
+#else
+	  if (__glibc_likely (thousands == NULL))
+	    break;
+	  else
+	    {
+	      for (cnt = 0; thousands[cnt] != '\0'; ++cnt)
+		if (thousands[cnt] != cp[cnt])
+		  break;
+	      if (thousands[cnt] != '\0')
+		break;
+	      cp += cnt - 1;
+	    }
+#endif
+	}
+      c = *++cp;
+    }
+
+  if (__builtin_expect (grouping != NULL, 0) && cp > start_of_digits)
+    {
+      /* Check the grouping of the digits.  */
+#ifdef USE_WIDE_CHAR
+      tp = __correctly_grouped_prefixwc (start_of_digits, cp, thousands,
+					 grouping);
+#else
+      tp = __correctly_grouped_prefixmb (start_of_digits, cp, thousands,
+					 grouping);
+#endif
+      if (cp != tp)
+	{
+	  /* Less than the entire string was correctly grouped.  */
+
+	  if (tp == start_of_digits)
+	    /* No valid group of numbers at all: no valid number.  */
+	    RETURN (0.0, nptr);
+
+	  if (tp < startp)
+	    /* The number is validly grouped, but consists
+	       only of zeroes.  The whole value is zero.  */
+	    RETURN (negative ? -0.0 : 0.0, tp);
+
+	  /* Recompute DIG_NO so we won't read more digits than
+	     are properly grouped.  */
+	  cp = tp;
+	  dig_no = 0;
+	  for (tp = startp; tp < cp; ++tp)
+	    if (*tp >= L_('0') && *tp <= L_('9'))
+	      ++dig_no;
+
+	  int_no = dig_no;
+	  lead_zero = 0;
+
+	  goto number_parsed;
+	}
+    }
+
+  /* We have the number of digits in the integer part.  Whether these
+     are all or any is really a fractional digit will be decided
+     later.  */
+  int_no = dig_no;
+  lead_zero = int_no == 0 ? (size_t) -1 : 0;
+
+  /* Read the fractional digits.  A special case are the 'american
+     style' numbers like `16.' i.e. with decimal point but without
+     trailing digits.  */
+  if (
+#ifdef USE_WIDE_CHAR
+      c == (wint_t) decimal
+#else
+      ({ for (cnt = 0; decimal[cnt] != '\0'; ++cnt)
+	   if (decimal[cnt] != cp[cnt])
+	     break;
+	 decimal[cnt] == '\0'; })
+#endif
+      )
+    {
+      cp += decimal_len;
+      c = *cp;
+      while ((c >= L_('0') && c <= L_('9')) ||
+	     (base == 16 && ({ CHAR_TYPE lo = TOLOWER (c);
+			       lo >= L_('a') && lo <= L_('f'); })))
+	{
+	  if (c != L_('0') && lead_zero == (size_t) -1)
+	    lead_zero = dig_no - int_no;
+	  ++dig_no;
+	  c = *++cp;
+	}
+    }
+  assert (dig_no <= (uintmax_t) INTMAX_MAX);
+
+  /* Remember start of exponent (if any).  */
+  expp = cp;
+
+  /* Read exponent.  */
+  lowc = TOLOWER (c);
+  if ((base == 16 && lowc == L_('p'))
+      || (base != 16 && lowc == L_('e')))
+    {
+      int exp_negative = 0;
+
+      c = *++cp;
+      if (c == L_('-'))
+	{
+	  exp_negative = 1;
+	  c = *++cp;
+	}
+      else if (c == L_('+'))
+	c = *++cp;
+
+      if (c >= L_('0') && c <= L_('9'))
+	{
+	  intmax_t exp_limit;
+
+	  /* Get the exponent limit. */
+	  if (base == 16)
+	    {
+	      if (exp_negative)
+		{
+		  assert (int_no <= (uintmax_t) (INTMAX_MAX
+						 + MIN_EXP - MANT_DIG) / 4);
+		  exp_limit = -MIN_EXP + MANT_DIG + 4 * (intmax_t) int_no;
+		}
+	      else
+		{
+		  if (int_no)
+		    {
+		      assert (lead_zero == 0
+			      && int_no <= (uintmax_t) INTMAX_MAX / 4);
+		      exp_limit = MAX_EXP - 4 * (intmax_t) int_no + 3;
+		    }
+		  else if (lead_zero == (size_t) -1)
+		    {
+		      /* The number is zero and this limit is
+			 arbitrary.  */
+		      exp_limit = MAX_EXP + 3;
+		    }
+		  else
+		    {
+		      assert (lead_zero
+			      <= (uintmax_t) (INTMAX_MAX - MAX_EXP - 3) / 4);
+		      exp_limit = (MAX_EXP
+				   + 4 * (intmax_t) lead_zero
+				   + 3);
+		    }
+		}
+	    }
+	  else
+	    {
+	      if (exp_negative)
+		{
+		  assert (int_no
+			  <= (uintmax_t) (INTMAX_MAX + MIN_10_EXP - MANT_DIG));
+		  exp_limit = -MIN_10_EXP + MANT_DIG + (intmax_t) int_no;
+		}
+	      else
+		{
+		  if (int_no)
+		    {
+		      assert (lead_zero == 0
+			      && int_no <= (uintmax_t) INTMAX_MAX);
+		      exp_limit = MAX_10_EXP - (intmax_t) int_no + 1;
+		    }
+		  else if (lead_zero == (size_t) -1)
+		    {
+		      /* The number is zero and this limit is
+			 arbitrary.  */
+		      exp_limit = MAX_10_EXP + 1;
+		    }
+		  else
+		    {
+		      assert (lead_zero
+			      <= (uintmax_t) (INTMAX_MAX - MAX_10_EXP - 1));
+		      exp_limit = MAX_10_EXP + (intmax_t) lead_zero + 1;
+		    }
+		}
+	    }
+
+	  if (exp_limit < 0)
+	    exp_limit = 0;
+
+	  do
+	    {
+	      if (__builtin_expect ((exponent > exp_limit / 10
+				     || (exponent == exp_limit / 10
+					 && c - L_('0') > exp_limit % 10)), 0))
+		/* The exponent is too large/small to represent a valid
+		   number.  */
+		{
+		  FLOAT result;
+
+		  /* We have to take care for special situation: a joker
+		     might have written "0.0e100000" which is in fact
+		     zero.  */
+		  if (lead_zero == (size_t) -1)
+		    result = negative ? -0.0 : 0.0;
+		  else
+		    {
+		      /* Overflow or underflow.  */
+		      result = (exp_negative
+				? underflow_value (negative)
+				: overflow_value (negative));
+		    }
+
+		  /* Accept all following digits as part of the exponent.  */
+		  do
+		    ++cp;
+		  while (*cp >= L_('0') && *cp <= L_('9'));
+
+		  RETURN (result, cp);
+		  /* NOTREACHED */
+		}
+
+	      exponent *= 10;
+	      exponent += c - L_('0');
+
+	      c = *++cp;
+	    }
+	  while (c >= L_('0') && c <= L_('9'));
+
+	  if (exp_negative)
+	    exponent = -exponent;
+	}
+      else
+	cp = expp;
+    }
+
+  /* We don't want to have to work with trailing zeroes after the radix.  */
+  if (dig_no > int_no)
+    {
+      while (expp[-1] == L_('0'))
+	{
+	  --expp;
+	  --dig_no;
+	}
+      assert (dig_no >= int_no);
+    }
+
+  if (dig_no == int_no && dig_no > 0 && exponent < 0)
+    do
+      {
+	while (! (base == 16 ? ISXDIGIT (expp[-1]) : ISDIGIT (expp[-1])))
+	  --expp;
+
+	if (expp[-1] != L_('0'))
+	  break;
+
+	--expp;
+	--dig_no;
+	--int_no;
+	exponent += base == 16 ? 4 : 1;
+      }
+    while (dig_no > 0 && exponent < 0);
+
+ number_parsed:
+
+  /* The whole string is parsed.  Store the address of the next character.  */
+  if (endptr)
+    *endptr = (STRING_TYPE *) cp;
+
+  if (dig_no == 0)
+    return negative ? -0.0 : 0.0;
+
+  if (lead_zero)
+    {
+      /* Find the decimal point */
+#ifdef USE_WIDE_CHAR
+      while (*startp != decimal)
+	++startp;
+#else
+      while (1)
+	{
+	  if (*startp == decimal[0])
+	    {
+	      for (cnt = 1; decimal[cnt] != '\0'; ++cnt)
+		if (decimal[cnt] != startp[cnt])
+		  break;
+	      if (decimal[cnt] == '\0')
+		break;
+	    }
+	  ++startp;
+	}
+#endif
+      startp += lead_zero + decimal_len;
+      assert (lead_zero <= (base == 16
+			    ? (uintmax_t) INTMAX_MAX / 4
+			    : (uintmax_t) INTMAX_MAX));
+      assert (lead_zero <= (base == 16
+			    ? ((uintmax_t) exponent
+			       - (uintmax_t) INTMAX_MIN) / 4
+			    : ((uintmax_t) exponent - (uintmax_t) INTMAX_MIN)));
+      exponent -= base == 16 ? 4 * (intmax_t) lead_zero : (intmax_t) lead_zero;
+      dig_no -= lead_zero;
+    }
+
+  /* If the BASE is 16 we can use a simpler algorithm.  */
+  if (base == 16)
+    {
+      static const int nbits[16] = { 0, 1, 2, 2, 3, 3, 3, 3,
+				     4, 4, 4, 4, 4, 4, 4, 4 };
+      int idx = (MANT_DIG - 1) / BITS_PER_MP_LIMB;
+      int pos = (MANT_DIG - 1) % BITS_PER_MP_LIMB;
+      mp_limb_t val;
+
+      while (!ISXDIGIT (*startp))
+	++startp;
+      while (*startp == L_('0'))
+	++startp;
+      if (ISDIGIT (*startp))
+	val = *startp++ - L_('0');
+      else
+	val = 10 + TOLOWER (*startp++) - L_('a');
+      bits = nbits[val];
+      /* We cannot have a leading zero.  */
+      assert (bits != 0);
+
+      if (pos + 1 >= 4 || pos + 1 >= bits)
+	{
+	  /* We don't have to care for wrapping.  This is the normal
+	     case so we add the first clause in the `if' expression as
+	     an optimization.  It is a compile-time constant and so does
+	     not cost anything.  */
+	  retval[idx] = val << (pos - bits + 1);
+	  pos -= bits;
+	}
+      else
+	{
+	  retval[idx--] = val >> (bits - pos - 1);
+	  retval[idx] = val << (BITS_PER_MP_LIMB - (bits - pos - 1));
+	  pos = BITS_PER_MP_LIMB - 1 - (bits - pos - 1);
+	}
+
+      /* Adjust the exponent for the bits we are shifting in.  */
+      assert (int_no <= (uintmax_t) (exponent < 0
+				     ? (INTMAX_MAX - bits + 1) / 4
+				     : (INTMAX_MAX - exponent - bits + 1) / 4));
+      exponent += bits - 1 + ((intmax_t) int_no - 1) * 4;
+
+      while (--dig_no > 0 && idx >= 0)
+	{
+	  if (!ISXDIGIT (*startp))
+	    startp += decimal_len;
+	  if (ISDIGIT (*startp))
+	    val = *startp++ - L_('0');
+	  else
+	    val = 10 + TOLOWER (*startp++) - L_('a');
+
+	  if (pos + 1 >= 4)
+	    {
+	      retval[idx] |= val << (pos - 4 + 1);
+	      pos -= 4;
+	    }
+	  else
+	    {
+	      retval[idx--] |= val >> (4 - pos - 1);
+	      val <<= BITS_PER_MP_LIMB - (4 - pos - 1);
+	      if (idx < 0)
+		{
+		  int rest_nonzero = 0;
+		  while (--dig_no > 0)
+		    {
+		      if (*startp != L_('0'))
+			{
+			  rest_nonzero = 1;
+			  break;
+			}
+		      startp++;
+		    }
+		  return round_and_return (retval, exponent, negative, val,
+					   BITS_PER_MP_LIMB - 1, rest_nonzero);
+		}
+
+	      retval[idx] = val;
+	      pos = BITS_PER_MP_LIMB - 1 - (4 - pos - 1);
+	    }
+	}
+
+      /* We ran out of digits.  */
+      MPN_ZERO (retval, idx);
+
+      return round_and_return (retval, exponent, negative, 0, 0, 0);
+    }
+
+  /* Now we have the number of digits in total and the integer digits as well
+     as the exponent and its sign.  We can decide whether the read digits are
+     really integer digits or belong to the fractional part; i.e. we normalize
+     123e-2 to 1.23.  */
+  {
+    intmax_t incr = (exponent < 0
+		     ? MAX (-(intmax_t) int_no, exponent)
+		     : MIN ((intmax_t) dig_no - (intmax_t) int_no, exponent));
+    int_no += incr;
+    exponent -= incr;
+  }
+
+  if (__glibc_unlikely (exponent > MAX_10_EXP + 1 - (intmax_t) int_no))
+    return overflow_value (negative);
+
+  /* 10^(MIN_10_EXP-1) is not normal.  Thus, 10^(MIN_10_EXP-1) /
+     2^MANT_DIG is below half the least subnormal, so anything with a
+     base-10 exponent less than the base-10 exponent (which is
+     MIN_10_EXP - 1 - ceil(MANT_DIG*log10(2))) of that value
+     underflows.  DIG is floor((MANT_DIG-1)log10(2)), so an exponent
+     below MIN_10_EXP - (DIG + 3) underflows.  But EXPONENT is
+     actually an exponent multiplied only by a fractional part, not an
+     integer part, so an exponent below MIN_10_EXP - (DIG + 2)
+     underflows.  */
+  if (__glibc_unlikely (exponent < MIN_10_EXP - (DIG + 2)))
+    return underflow_value (negative);
+
+  if (int_no > 0)
+    {
+      /* Read the integer part as a multi-precision number to NUM.  */
+      startp = str_to_mpn (startp, int_no, num, &numsize, &exponent
+#ifndef USE_WIDE_CHAR
+			   , decimal, decimal_len, thousands
+#endif
+			   );
+
+      if (exponent > 0)
+	{
+	  /* We now multiply the gained number by the given power of ten.  */
+	  mp_limb_t *psrc = num;
+	  mp_limb_t *pdest = den;
+	  int expbit = 1;
+	  const struct mp_power *ttab = &_fpioconst_pow10[0];
+
+	  do
+	    {
+	      if ((exponent & expbit) != 0)
+		{
+		  size_t size = ttab->arraysize - _FPIO_CONST_OFFSET;
+		  mp_limb_t cy;
+		  exponent ^= expbit;
+
+		  /* FIXME: not the whole multiplication has to be
+		     done.  If we have the needed number of bits we
+		     only need the information whether more non-zero
+		     bits follow.  */
+		  if (numsize >= ttab->arraysize - _FPIO_CONST_OFFSET)
+		    cy = __mpn_mul (pdest, psrc, numsize,
+				    &__tens[ttab->arrayoff
+					   + _FPIO_CONST_OFFSET],
+				    size);
+		  else
+		    cy = __mpn_mul (pdest, &__tens[ttab->arrayoff
+						  + _FPIO_CONST_OFFSET],
+				    size, psrc, numsize);
+		  numsize += size;
+		  if (cy == 0)
+		    --numsize;
+		  (void) SWAP (psrc, pdest);
+		}
+	      expbit <<= 1;
+	      ++ttab;
+	    }
+	  while (exponent != 0);
+
+	  if (psrc == den)
+	    memcpy (num, den, numsize * sizeof (mp_limb_t));
+	}
+
+      /* Determine how many bits of the result we already have.  */
+      count_leading_zeros (bits, num[numsize - 1]);
+      bits = numsize * BITS_PER_MP_LIMB - bits;
+
+      /* Now we know the exponent of the number in base two.
+	 Check it against the maximum possible exponent.  */
+      if (__glibc_unlikely (bits > MAX_EXP))
+	return overflow_value (negative);
+
+      /* We have already the first BITS bits of the result.  Together with
+	 the information whether more non-zero bits follow this is enough
+	 to determine the result.  */
+      if (bits > MANT_DIG)
+	{
+	  int i;
+	  const mp_size_t least_idx = (bits - MANT_DIG) / BITS_PER_MP_LIMB;
+	  const mp_size_t least_bit = (bits - MANT_DIG) % BITS_PER_MP_LIMB;
+	  const mp_size_t round_idx = least_bit == 0 ? least_idx - 1
+						     : least_idx;
+	  const mp_size_t round_bit = least_bit == 0 ? BITS_PER_MP_LIMB - 1
+						     : least_bit - 1;
+
+	  if (least_bit == 0)
+	    memcpy (retval, &num[least_idx],
+		    RETURN_LIMB_SIZE * sizeof (mp_limb_t));
+	  else
+	    {
+	      for (i = least_idx; i < numsize - 1; ++i)
+		retval[i - least_idx] = (num[i] >> least_bit)
+					| (num[i + 1]
+					   << (BITS_PER_MP_LIMB - least_bit));
+	      if (i - least_idx < RETURN_LIMB_SIZE)
+		retval[RETURN_LIMB_SIZE - 1] = num[i] >> least_bit;
+	    }
+
+	  /* Check whether any limb beside the ones in RETVAL are non-zero.  */
+	  for (i = 0; num[i] == 0; ++i)
+	    ;
+
+	  return round_and_return (retval, bits - 1, negative,
+				   num[round_idx], round_bit,
+				   int_no < dig_no || i < round_idx);
+	  /* NOTREACHED */
+	}
+      else if (dig_no == int_no)
+	{
+	  const mp_size_t target_bit = (MANT_DIG - 1) % BITS_PER_MP_LIMB;
+	  const mp_size_t is_bit = (bits - 1) % BITS_PER_MP_LIMB;
+
+	  if (target_bit == is_bit)
+	    {
+	      memcpy (&retval[RETURN_LIMB_SIZE - numsize], num,
+		      numsize * sizeof (mp_limb_t));
+	      /* FIXME: the following loop can be avoided if we assume a
+		 maximal MANT_DIG value.  */
+	      MPN_ZERO (retval, RETURN_LIMB_SIZE - numsize);
+	    }
+	  else if (target_bit > is_bit)
+	    {
+	      (void) __mpn_lshift (&retval[RETURN_LIMB_SIZE - numsize],
+				   num, numsize, target_bit - is_bit);
+	      /* FIXME: the following loop can be avoided if we assume a
+		 maximal MANT_DIG value.  */
+	      MPN_ZERO (retval, RETURN_LIMB_SIZE - numsize);
+	    }
+	  else
+	    {
+	      mp_limb_t cy;
+	      assert (numsize < RETURN_LIMB_SIZE);
+
+	      cy = __mpn_rshift (&retval[RETURN_LIMB_SIZE - numsize],
+				 num, numsize, is_bit - target_bit);
+	      retval[RETURN_LIMB_SIZE - numsize - 1] = cy;
+	      /* FIXME: the following loop can be avoided if we assume a
+		 maximal MANT_DIG value.  */
+	      MPN_ZERO (retval, RETURN_LIMB_SIZE - numsize - 1);
+	    }
+
+	  return round_and_return (retval, bits - 1, negative, 0, 0, 0);
+	  /* NOTREACHED */
+	}
+
+      /* Store the bits we already have.  */
+      memcpy (retval, num, numsize * sizeof (mp_limb_t));
+#if RETURN_LIMB_SIZE > 1
+      if (numsize < RETURN_LIMB_SIZE)
+# if RETURN_LIMB_SIZE == 2
+	retval[numsize] = 0;
+# else
+	MPN_ZERO (retval + numsize, RETURN_LIMB_SIZE - numsize);
+# endif
+#endif
+    }
+
+  /* We have to compute at least some of the fractional digits.  */
+  {
+    /* We construct a fraction and the result of the division gives us
+       the needed digits.  The denominator is 1.0 multiplied by the
+       exponent of the lowest digit; i.e. 0.123 gives 123 / 1000 and
+       123e-6 gives 123 / 1000000.  */
+
+    int expbit;
+    int neg_exp;
+    int more_bits;
+    int need_frac_digits;
+    mp_limb_t cy;
+    mp_limb_t *psrc = den;
+    mp_limb_t *pdest = num;
+    const struct mp_power *ttab = &_fpioconst_pow10[0];
+
+    assert (dig_no > int_no
+	    && exponent <= 0
+	    && exponent >= MIN_10_EXP - (DIG + 2));
+
+    /* We need to compute MANT_DIG - BITS fractional bits that lie
+       within the mantissa of the result, the following bit for
+       rounding, and to know whether any subsequent bit is 0.
+       Computing a bit with value 2^-n means looking at n digits after
+       the decimal point.  */
+    if (bits > 0)
+      {
+	/* The bits required are those immediately after the point.  */
+	assert (int_no > 0 && exponent == 0);
+	need_frac_digits = 1 + MANT_DIG - bits;
+      }
+    else
+      {
+	/* The number is in the form .123eEXPONENT.  */
+	assert (int_no == 0 && *startp != L_('0'));
+	/* The number is at least 10^(EXPONENT-1), and 10^3 <
+	   2^10.  */
+	int neg_exp_2 = ((1 - exponent) * 10) / 3 + 1;
+	/* The number is at least 2^-NEG_EXP_2.  We need up to
+	   MANT_DIG bits following that bit.  */
+	need_frac_digits = neg_exp_2 + MANT_DIG;
+	/* However, we never need bits beyond 1/4 ulp of the smallest
+	   representable value.  (That 1/4 ulp bit is only needed to
+	   determine tinyness on machines where tinyness is determined
+	   after rounding.)  */
+	if (need_frac_digits > MANT_DIG - MIN_EXP + 2)
+	  need_frac_digits = MANT_DIG - MIN_EXP + 2;
+	/* At this point, NEED_FRAC_DIGITS is the total number of
+	   digits needed after the point, but some of those may be
+	   leading 0s.  */
+	need_frac_digits += exponent;
+	/* Any cases underflowing enough that none of the fractional
+	   digits are needed should have been caught earlier (such
+	   cases are on the order of 10^-n or smaller where 2^-n is
+	   the least subnormal).  */
+	assert (need_frac_digits > 0);
+      }
+
+    if (need_frac_digits > (intmax_t) dig_no - (intmax_t) int_no)
+      need_frac_digits = (intmax_t) dig_no - (intmax_t) int_no;
+
+    if ((intmax_t) dig_no > (intmax_t) int_no + need_frac_digits)
+      {
+	dig_no = int_no + need_frac_digits;
+	more_bits = 1;
+      }
+    else
+      more_bits = 0;
+
+    neg_exp = (intmax_t) dig_no - (intmax_t) int_no - exponent;
+
+    /* Construct the denominator.  */
+    densize = 0;
+    expbit = 1;
+    do
+      {
+	if ((neg_exp & expbit) != 0)
+	  {
+	    mp_limb_t cy;
+	    neg_exp ^= expbit;
+
+	    if (densize == 0)
+	      {
+		densize = ttab->arraysize - _FPIO_CONST_OFFSET;
+		memcpy (psrc, &__tens[ttab->arrayoff + _FPIO_CONST_OFFSET],
+			densize * sizeof (mp_limb_t));
+	      }
+	    else
+	      {
+		cy = __mpn_mul (pdest, &__tens[ttab->arrayoff
+					      + _FPIO_CONST_OFFSET],
+				ttab->arraysize - _FPIO_CONST_OFFSET,
+				psrc, densize);
+		densize += ttab->arraysize - _FPIO_CONST_OFFSET;
+		if (cy == 0)
+		  --densize;
+		(void) SWAP (psrc, pdest);
+	      }
+	  }
+	expbit <<= 1;
+	++ttab;
+      }
+    while (neg_exp != 0);
+
+    if (psrc == num)
+      memcpy (den, num, densize * sizeof (mp_limb_t));
+
+    /* Read the fractional digits from the string.  */
+    (void) str_to_mpn (startp, dig_no - int_no, num, &numsize, &exponent
+#ifndef USE_WIDE_CHAR
+		       , decimal, decimal_len, thousands
+#endif
+		       );
+
+    /* We now have to shift both numbers so that the highest bit in the
+       denominator is set.  In the same process we copy the numerator to
+       a high place in the array so that the division constructs the wanted
+       digits.  This is done by a "quasi fix point" number representation.
+
+       num:   ddddddddddd . 0000000000000000000000
+	      |--- m ---|
+       den:                            ddddddddddd      n >= m
+				       |--- n ---|
+     */
+
+    count_leading_zeros (cnt, den[densize - 1]);
+
+    if (cnt > 0)
+      {
+	/* Don't call `mpn_shift' with a count of zero since the specification
+	   does not allow this.  */
+	(void) __mpn_lshift (den, den, densize, cnt);
+	cy = __mpn_lshift (num, num, numsize, cnt);
+	if (cy != 0)
+	  num[numsize++] = cy;
+      }
+
+    /* Now we are ready for the division.  But it is not necessary to
+       do a full multi-precision division because we only need a small
+       number of bits for the result.  So we do not use __mpn_divmod
+       here but instead do the division here by hand and stop whenever
+       the needed number of bits is reached.  The code itself comes
+       from the GNU MP Library by Torbj\"orn Granlund.  */
+
+    exponent = bits;
+
+    switch (densize)
+      {
+      case 1:
+	{
+	  mp_limb_t d, n, quot;
+	  int used = 0;
+
+	  n = num[0];
+	  d = den[0];
+	  assert (numsize == 1 && n < d);
+
+	  do
+	    {
+	      udiv_qrnnd (quot, n, n, 0, d);
+
+#define got_limb							      \
+	      if (bits == 0)						      \
+		{							      \
+		  int cnt;						      \
+		  if (quot == 0)					      \
+		    cnt = BITS_PER_MP_LIMB;				      \
+		  else							      \
+		    count_leading_zeros (cnt, quot);			      \
+		  exponent -= cnt;					      \
+		  if (BITS_PER_MP_LIMB - cnt > MANT_DIG)		      \
+		    {							      \
+		      used = MANT_DIG + cnt;				      \
+		      retval[0] = quot >> (BITS_PER_MP_LIMB - used);	      \
+		      bits = MANT_DIG + 1;				      \
+		    }							      \
+		  else							      \
+		    {							      \
+		      /* Note that we only clear the second element.  */      \
+		      /* The conditional is determined at compile time.  */   \
+		      if (RETURN_LIMB_SIZE > 1)				      \
+			retval[1] = 0;					      \
+		      retval[0] = quot;					      \
+		      bits = -cnt;					      \
+		    }							      \
+		}							      \
+	      else if (bits + BITS_PER_MP_LIMB <= MANT_DIG)		      \
+		__mpn_lshift_1 (retval, RETURN_LIMB_SIZE, BITS_PER_MP_LIMB,   \
+				quot);					      \
+	      else							      \
+		{							      \
+		  used = MANT_DIG - bits;				      \
+		  if (used > 0)						      \
+		    __mpn_lshift_1 (retval, RETURN_LIMB_SIZE, used, quot);    \
+		}							      \
+	      bits += BITS_PER_MP_LIMB
+
+	      got_limb;
+	    }
+	  while (bits <= MANT_DIG);
+
+	  return round_and_return (retval, exponent - 1, negative,
+				   quot, BITS_PER_MP_LIMB - 1 - used,
+				   more_bits || n != 0);
+	}
+      case 2:
+	{
+	  mp_limb_t d0, d1, n0, n1;
+	  mp_limb_t quot = 0;
+	  int used = 0;
+
+	  d0 = den[0];
+	  d1 = den[1];
+
+	  if (numsize < densize)
+	    {
+	      if (num[0] >= d1)
+		{
+		  /* The numerator of the number occupies fewer bits than
+		     the denominator but the one limb is bigger than the
+		     high limb of the numerator.  */
+		  n1 = 0;
+		  n0 = num[0];
+		}
+	      else
+		{
+		  if (bits <= 0)
+		    exponent -= BITS_PER_MP_LIMB;
+		  else
+		    {
+		      if (bits + BITS_PER_MP_LIMB <= MANT_DIG)
+			__mpn_lshift_1 (retval, RETURN_LIMB_SIZE,
+					BITS_PER_MP_LIMB, 0);
+		      else
+			{
+			  used = MANT_DIG - bits;
+			  if (used > 0)
+			    __mpn_lshift_1 (retval, RETURN_LIMB_SIZE, used, 0);
+			}
+		      bits += BITS_PER_MP_LIMB;
+		    }
+		  n1 = num[0];
+		  n0 = 0;
+		}
+	    }
+	  else
+	    {
+	      n1 = num[1];
+	      n0 = num[0];
+	    }
+
+	  while (bits <= MANT_DIG)
+	    {
+	      mp_limb_t r;
+
+	      if (n1 == d1)
+		{
+		  /* QUOT should be either 111..111 or 111..110.  We need
+		     special treatment of this rare case as normal division
+		     would give overflow.  */
+		  quot = ~(mp_limb_t) 0;
+
+		  r = n0 + d1;
+		  if (r < d1)	/* Carry in the addition?  */
+		    {
+		      add_ssaaaa (n1, n0, r - d0, 0, 0, d0);
+		      goto have_quot;
+		    }
+		  n1 = d0 - (d0 != 0);
+		  n0 = -d0;
+		}
+	      else
+		{
+		  udiv_qrnnd (quot, r, n1, n0, d1);
+		  umul_ppmm (n1, n0, d0, quot);
+		}
+
+	    q_test:
+	      if (n1 > r || (n1 == r && n0 > 0))
+		{
+		  /* The estimated QUOT was too large.  */
+		  --quot;
+
+		  sub_ddmmss (n1, n0, n1, n0, 0, d0);
+		  r += d1;
+		  if (r >= d1)	/* If not carry, test QUOT again.  */
+		    goto q_test;
+		}
+	      sub_ddmmss (n1, n0, r, 0, n1, n0);
+
+	    have_quot:
+	      got_limb;
+	    }
+
+	  return round_and_return (retval, exponent - 1, negative,
+				   quot, BITS_PER_MP_LIMB - 1 - used,
+				   more_bits || n1 != 0 || n0 != 0);
+	}
+      default:
+	{
+	  int i;
+	  mp_limb_t cy, dX, d1, n0, n1;
+	  mp_limb_t quot = 0;
+	  int used = 0;
+
+	  dX = den[densize - 1];
+	  d1 = den[densize - 2];
+
+	  /* The division does not work if the upper limb of the two-limb
+	     numerator is greater than the denominator.  */
+	  if (__mpn_cmp (num, &den[densize - numsize], numsize) > 0)
+	    num[numsize++] = 0;
+
+	  if (numsize < densize)
+	    {
+	      mp_size_t empty = densize - numsize;
+	      int i;
+
+	      if (bits <= 0)
+		exponent -= empty * BITS_PER_MP_LIMB;
+	      else
+		{
+		  if (bits + empty * BITS_PER_MP_LIMB <= MANT_DIG)
+		    {
+		      /* We make a difference here because the compiler
+			 cannot optimize the `else' case that good and
+			 this reflects all currently used FLOAT types
+			 and GMP implementations.  */
+#if RETURN_LIMB_SIZE <= 2
+		      assert (empty == 1);
+		      __mpn_lshift_1 (retval, RETURN_LIMB_SIZE,
+				      BITS_PER_MP_LIMB, 0);
+#else
+		      for (i = RETURN_LIMB_SIZE - 1; i >= empty; --i)
+			retval[i] = retval[i - empty];
+		      while (i >= 0)
+			retval[i--] = 0;
+#endif
+		    }
+		  else
+		    {
+		      used = MANT_DIG - bits;
+		      if (used >= BITS_PER_MP_LIMB)
+			{
+			  int i;
+			  (void) __mpn_lshift (&retval[used
+						       / BITS_PER_MP_LIMB],
+					       retval,
+					       (RETURN_LIMB_SIZE
+						- used / BITS_PER_MP_LIMB),
+					       used % BITS_PER_MP_LIMB);
+			  for (i = used / BITS_PER_MP_LIMB - 1; i >= 0; --i)
+			    retval[i] = 0;
+			}
+		      else if (used > 0)
+			__mpn_lshift_1 (retval, RETURN_LIMB_SIZE, used, 0);
+		    }
+		  bits += empty * BITS_PER_MP_LIMB;
+		}
+	      for (i = numsize; i > 0; --i)
+		num[i + empty] = num[i - 1];
+	      MPN_ZERO (num, empty + 1);
+	    }
+	  else
+	    {
+	      int i;
+	      assert (numsize == densize);
+	      for (i = numsize; i > 0; --i)
+		num[i] = num[i - 1];
+	      num[0] = 0;
+	    }
+
+	  den[densize] = 0;
+	  n0 = num[densize];
+
+	  while (bits <= MANT_DIG)
+	    {
+	      if (n0 == dX)
+		/* This might over-estimate QUOT, but it's probably not
+		   worth the extra code here to find out.  */
+		quot = ~(mp_limb_t) 0;
+	      else
+		{
+		  mp_limb_t r;
+
+		  udiv_qrnnd (quot, r, n0, num[densize - 1], dX);
+		  umul_ppmm (n1, n0, d1, quot);
+
+		  while (n1 > r || (n1 == r && n0 > num[densize - 2]))
+		    {
+		      --quot;
+		      r += dX;
+		      if (r < dX) /* I.e. "carry in previous addition?" */
+			break;
+		      n1 -= n0 < d1;
+		      n0 -= d1;
+		    }
+		}
+
+	      /* Possible optimization: We already have (q * n0) and (1 * n1)
+		 after the calculation of QUOT.  Taking advantage of this, we
+		 could make this loop make two iterations less.  */
+
+	      cy = __mpn_submul_1 (num, den, densize + 1, quot);
+
+	      if (num[densize] != cy)
+		{
+		  cy = __mpn_add_n (num, num, den, densize);
+		  assert (cy != 0);
+		  --quot;
+		}
+	      n0 = num[densize] = num[densize - 1];
+	      for (i = densize - 1; i > 0; --i)
+		num[i] = num[i - 1];
+	      num[0] = 0;
+
+	      got_limb;
+	    }
+
+	  for (i = densize; i >= 0 && num[i] == 0; --i)
+	    ;
+	  return round_and_return (retval, exponent - 1, negative,
+				   quot, BITS_PER_MP_LIMB - 1 - used,
+				   more_bits || i >= 0);
+	}
+      }
+  }
+
+  /* NOTREACHED */
+}
+#if defined _LIBC && !defined USE_WIDE_CHAR
+libc_hidden_def (____STRTOF_INTERNAL)
+#endif
+
+/* External user entry point.  */
+
+FLOAT
+#ifdef weak_function
+weak_function
+#endif
+__STRTOF (const STRING_TYPE *nptr, STRING_TYPE **endptr, __locale_t loc)
+{
+  return ____STRTOF_INTERNAL (nptr, endptr, 0, loc);
+}
+#if defined _LIBC
+libc_hidden_def (__STRTOF)
+libc_hidden_ver (__STRTOF, STRTOF)
+#endif
+weak_alias (__STRTOF, STRTOF)
+
+#ifdef LONG_DOUBLE_COMPAT
+# if LONG_DOUBLE_COMPAT(libc, GLIBC_2_1)
+#  ifdef USE_WIDE_CHAR
+compat_symbol (libc, __wcstod_l, __wcstold_l, GLIBC_2_1);
+#  else
+compat_symbol (libc, __strtod_l, __strtold_l, GLIBC_2_1);
+#  endif
+# endif
+# if LONG_DOUBLE_COMPAT(libc, GLIBC_2_3)
+#  ifdef USE_WIDE_CHAR
+compat_symbol (libc, wcstod_l, wcstold_l, GLIBC_2_3);
+#  else
+compat_symbol (libc, strtod_l, strtold_l, GLIBC_2_3);
+#  endif
+# endif
+#endif
diff --git a/REORG.TODO/stdlib/strtod_nan.c b/REORG.TODO/stdlib/strtod_nan.c
new file mode 100644
index 0000000000..3fbfb46cfc
--- /dev/null
+++ b/REORG.TODO/stdlib/strtod_nan.c
@@ -0,0 +1,24 @@
+/* Convert string for NaN payload to corresponding NaN.  Narrow
+   strings, double.
+   Copyright (C) 2015-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <strtod_nan_narrow.h>
+#include <strtod_nan_double.h>
+
+#define STRTOD_NAN __strtod_nan
+#include <strtod_nan_main.c>
diff --git a/REORG.TODO/stdlib/strtod_nan_double.h b/REORG.TODO/stdlib/strtod_nan_double.h
new file mode 100644
index 0000000000..224654d005
--- /dev/null
+++ b/REORG.TODO/stdlib/strtod_nan_double.h
@@ -0,0 +1,30 @@
+/* Convert string for NaN payload to corresponding NaN.  For double.
+   Copyright (C) 1997-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#define FLOAT		double
+#define SET_MANTISSA(flt, mant)				\
+  do							\
+    {							\
+      union ieee754_double u;				\
+      u.d = (flt);					\
+      u.ieee_nan.mantissa0 = (mant) >> 32;		\
+      u.ieee_nan.mantissa1 = (mant);			\
+      if ((u.ieee.mantissa0 | u.ieee.mantissa1) != 0)	\
+	(flt) = u.d;					\
+    }							\
+  while (0)
diff --git a/REORG.TODO/stdlib/strtod_nan_float.h b/REORG.TODO/stdlib/strtod_nan_float.h
new file mode 100644
index 0000000000..99e95cc2e7
--- /dev/null
+++ b/REORG.TODO/stdlib/strtod_nan_float.h
@@ -0,0 +1,29 @@
+/* Convert string for NaN payload to corresponding NaN.  For float.
+   Copyright (C) 1997-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#define	FLOAT		float
+#define SET_MANTISSA(flt, mant)			\
+  do						\
+    {						\
+      union ieee754_float u;			\
+      u.f = (flt);				\
+      u.ieee_nan.mantissa = (mant);		\
+      if (u.ieee.mantissa != 0)			\
+	(flt) = u.f;				\
+    }						\
+  while (0)
diff --git a/REORG.TODO/stdlib/strtod_nan_main.c b/REORG.TODO/stdlib/strtod_nan_main.c
new file mode 100644
index 0000000000..96b788cb1e
--- /dev/null
+++ b/REORG.TODO/stdlib/strtod_nan_main.c
@@ -0,0 +1,63 @@
+/* Convert string for NaN payload to corresponding NaN.
+   Copyright (C) 1997-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <ieee754.h>
+#include <locale.h>
+#include <math.h>
+#include <stdlib.h>
+#include <wchar.h>
+
+
+/* If STR starts with an optional n-char-sequence as defined by ISO C
+   (a sequence of ASCII letters, digits and underscores), followed by
+   ENDC, return a NaN whose payload is set based on STR.  Otherwise,
+   return a default NAN.  If ENDPTR is not NULL, set *ENDPTR to point
+   to the character after the initial n-char-sequence.  */
+
+internal_function
+FLOAT
+STRTOD_NAN (const STRING_TYPE *str, STRING_TYPE **endptr, STRING_TYPE endc)
+{
+  const STRING_TYPE *cp = str;
+
+  while ((*cp >= L_('0') && *cp <= L_('9'))
+	 || (*cp >= L_('A') && *cp <= L_('Z'))
+	 || (*cp >= L_('a') && *cp <= L_('z'))
+	 || *cp == L_('_'))
+    ++cp;
+
+  FLOAT retval = NAN;
+  if (*cp != endc)
+    goto out;
+
+  /* This is a system-dependent way to specify the bitmask used for
+     the NaN.  We expect it to be a number which is put in the
+     mantissa of the number.  */
+  STRING_TYPE *endp;
+  unsigned long long int mant;
+
+  mant = STRTOULL (str, &endp, 0);
+  if (endp == cp)
+    SET_MANTISSA (retval, mant);
+
+ out:
+  if (endptr != NULL)
+    *endptr = (STRING_TYPE *) cp;
+  return retval;
+}
+libc_hidden_def (STRTOD_NAN)
diff --git a/REORG.TODO/stdlib/strtod_nan_narrow.h b/REORG.TODO/stdlib/strtod_nan_narrow.h
new file mode 100644
index 0000000000..15733c21ae
--- /dev/null
+++ b/REORG.TODO/stdlib/strtod_nan_narrow.h
@@ -0,0 +1,22 @@
+/* Convert string for NaN payload to corresponding NaN.  Narrow strings.
+   Copyright (C) 1997-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#define STRING_TYPE char
+#define L_(Ch) Ch
+#define STRTOULL(S, E, B) ____strtoull_l_internal ((S), (E), (B), 0,	\
+						   _nl_C_locobj_ptr)
diff --git a/REORG.TODO/stdlib/strtod_nan_wide.h b/REORG.TODO/stdlib/strtod_nan_wide.h
new file mode 100644
index 0000000000..23abb2c745
--- /dev/null
+++ b/REORG.TODO/stdlib/strtod_nan_wide.h
@@ -0,0 +1,22 @@
+/* Convert string for NaN payload to corresponding NaN.  Wide strings.
+   Copyright (C) 1997-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#define STRING_TYPE wchar_t
+#define L_(Ch) L##Ch
+#define STRTOULL(S, E, B) ____wcstoull_l_internal ((S), (E), (B), 0,	\
+						   _nl_C_locobj_ptr)
diff --git a/REORG.TODO/stdlib/strtof.c b/REORG.TODO/stdlib/strtof.c
new file mode 100644
index 0000000000..600512134c
--- /dev/null
+++ b/REORG.TODO/stdlib/strtof.c
@@ -0,0 +1,34 @@
+/* Read decimal floating point numbers.
+   This file is part of the GNU C Library.
+   Copyright (C) 1995-2017 Free Software Foundation, Inc.
+   Contributed by Ulrich Drepper <drepper@gnu.org>, 1995.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* The actual implementation for all floating point sizes is in strtod.c.
+   These macros tell it to produce the `float' version, `strtof'.  */
+
+#define	FLOAT		float
+#define	FLT		FLT
+#ifdef USE_WIDE_CHAR
+#define STRTOF		wcstof
+#define STRTOF_L	__wcstof_l
+#else
+# define STRTOF		strtof
+# define STRTOF_L	__strtof_l
+#endif
+
+
+#include "strtod.c"
diff --git a/REORG.TODO/stdlib/strtof_l.c b/REORG.TODO/stdlib/strtof_l.c
new file mode 100644
index 0000000000..57e557516a
--- /dev/null
+++ b/REORG.TODO/stdlib/strtof_l.c
@@ -0,0 +1,38 @@
+/* Convert string representing a number to float value, using given locale.
+   Copyright (C) 1997-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <xlocale.h>
+
+extern float ____strtof_l_internal (const char *, char **, int, __locale_t);
+
+#define	FLOAT		float
+#define	FLT		FLT
+#ifdef USE_WIDE_CHAR
+# define STRTOF		wcstof_l
+# define __STRTOF	__wcstof_l
+# define STRTOF_NAN	__wcstof_nan
+#else
+# define STRTOF		strtof_l
+# define __STRTOF	__strtof_l
+# define STRTOF_NAN	__strtof_nan
+#endif
+#define	MPN2FLOAT	__mpn_construct_float
+#define	FLOAT_HUGE_VAL	HUGE_VALF
+
+#include "strtod_l.c"
diff --git a/REORG.TODO/stdlib/strtof_nan.c b/REORG.TODO/stdlib/strtof_nan.c
new file mode 100644
index 0000000000..0dd44294cc
--- /dev/null
+++ b/REORG.TODO/stdlib/strtof_nan.c
@@ -0,0 +1,24 @@
+/* Convert string for NaN payload to corresponding NaN.  Narrow
+   strings, float.
+   Copyright (C) 2015-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <strtod_nan_narrow.h>
+#include <strtod_nan_float.h>
+
+#define STRTOD_NAN __strtof_nan
+#include <strtod_nan_main.c>
diff --git a/REORG.TODO/stdlib/strtoimax.c b/REORG.TODO/stdlib/strtoimax.c
new file mode 100644
index 0000000000..f1de70f320
--- /dev/null
+++ b/REORG.TODO/stdlib/strtoimax.c
@@ -0,0 +1 @@
+#error "The correct implementation must be chosen based on the `intmax_t' type"
diff --git a/REORG.TODO/stdlib/strtol.c b/REORG.TODO/stdlib/strtol.c
new file mode 100644
index 0000000000..8ac8347e7d
--- /dev/null
+++ b/REORG.TODO/stdlib/strtol.c
@@ -0,0 +1,109 @@
+/* Convert string representation of a number into an integer value.
+   Copyright (C) 1991-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <stdlib.h>
+#include <wchar.h>
+#include <locale/localeinfo.h>
+
+#ifndef UNSIGNED
+# define UNSIGNED 0
+# define INT LONG int
+#else
+# define INT unsigned LONG int
+#endif
+
+#if UNSIGNED
+# ifdef USE_WIDE_CHAR
+#  ifdef QUAD
+#   define strtol wcstoull
+#   define __strtol_l __wcstoull_l
+#  else
+#   define strtol wcstoul
+#   define __strtol_l __wcstoul_l
+#  endif
+# else
+#  ifdef QUAD
+#   define strtol strtoull
+#   define __strtol_l __strtoull_l
+#  else
+#   define strtol strtoul
+#   define __strtol_l __strtoul_l
+#  endif
+# endif
+#else
+# ifdef USE_WIDE_CHAR
+#  ifdef QUAD
+#   define strtol wcstoll
+#   define __strtol_l __wcstoll_l
+#  else
+#   define strtol wcstol
+#   define __strtol_l __wcstol_l
+#  endif
+# else
+#  ifdef QUAD
+#   define strtol strtoll
+#   define __strtol_l __strtoll_l
+#  endif
+# endif
+#endif
+
+
+/* If QUAD is defined, we are defining `strtoll' or `strtoull',
+   operating on `long long int's.  */
+#ifdef QUAD
+# define LONG long long
+#else
+# define LONG long
+#endif
+
+
+#ifdef USE_WIDE_CHAR
+# define STRING_TYPE wchar_t
+#else
+# define STRING_TYPE char
+#endif
+
+
+#define INTERNAL(X) INTERNAL1(X)
+#define INTERNAL1(X) __##X##_internal
+
+#define SYM__(X) SYM__1 (X)
+#define SYM__1(X) __ ## X
+#define __strtol SYM__ (strtol)
+
+
+extern INT INTERNAL (__strtol_l) (const STRING_TYPE *, STRING_TYPE **, int,
+				  int, __locale_t);
+
+
+INT
+INTERNAL (strtol) (const STRING_TYPE *nptr, STRING_TYPE **endptr,
+		   int base, int group)
+{
+  return INTERNAL (__strtol_l) (nptr, endptr, base, group, _NL_CURRENT_LOCALE);
+}
+libc_hidden_def (INTERNAL (strtol))
+
+
+INT
+__strtol (const STRING_TYPE *nptr, STRING_TYPE **endptr, int base)
+{
+  return INTERNAL (__strtol_l) (nptr, endptr, base, 0, _NL_CURRENT_LOCALE);
+}
+weak_alias (__strtol, strtol)
+libc_hidden_weak (strtol)
diff --git a/REORG.TODO/stdlib/strtol_l.c b/REORG.TODO/stdlib/strtol_l.c
new file mode 100644
index 0000000000..5a0683b2bb
--- /dev/null
+++ b/REORG.TODO/stdlib/strtol_l.c
@@ -0,0 +1,551 @@
+/* Convert string representing a number to integer value, using given locale.
+   Copyright (C) 1997-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+
+#if HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#ifdef _LIBC
+# define USE_NUMBER_GROUPING
+# define HAVE_LIMITS_H
+#endif
+
+#include <ctype.h>
+#include <errno.h>
+#ifndef __set_errno
+# define __set_errno(Val) errno = (Val)
+#endif
+
+#ifdef HAVE_LIMITS_H
+# include <limits.h>
+#endif
+
+#include <stddef.h>
+#include <stdlib.h>
+#include <string.h>
+#include <locale.h>
+#include <xlocale.h>
+#include <stdint.h>
+#include <bits/wordsize.h>
+
+#ifdef USE_NUMBER_GROUPING
+# include "../locale/localeinfo.h"
+#endif
+
+/* Nonzero if we are defining `strtoul' or `strtoull', operating on
+   unsigned integers.  */
+#ifndef UNSIGNED
+# define UNSIGNED 0
+# define INT LONG int
+#else
+# define INT unsigned LONG int
+#endif
+
+/* Determine the name.  */
+#if UNSIGNED
+# ifdef USE_WIDE_CHAR
+#  ifdef QUAD
+#   define strtol_l wcstoull_l
+#  else
+#   define strtol_l wcstoul_l
+#  endif
+# else
+#  ifdef QUAD
+#   define strtol_l strtoull_l
+#  else
+#   define strtol_l strtoul_l
+#  endif
+# endif
+#else
+# ifdef USE_WIDE_CHAR
+#  ifdef QUAD
+#   define strtol_l wcstoll_l
+#  else
+#   define strtol_l wcstol_l
+#  endif
+# else
+#  ifdef QUAD
+#   define strtol_l strtoll_l
+#  else
+#   define strtol_l strtol_l
+#  endif
+# endif
+#endif
+
+#define __strtol_l __strtol_l2(strtol_l)
+#define __strtol_l2(name) __strtol_l3(name)
+#define __strtol_l3(name) __##name
+
+
+/* If QUAD is defined, we are defining `strtoll' or `strtoull',
+   operating on `long long int's.  */
+#ifdef QUAD
+# define LONG long long
+# define STRTOL_LONG_MIN LONG_LONG_MIN
+# define STRTOL_LONG_MAX LONG_LONG_MAX
+# define STRTOL_ULONG_MAX ULONG_LONG_MAX
+#else
+# define LONG long
+
+# ifndef ULONG_MAX
+#  define ULONG_MAX ((unsigned long int) ~(unsigned long int) 0)
+# endif
+# ifndef LONG_MAX
+#  define LONG_MAX ((long int) (ULONG_MAX >> 1))
+# endif
+# define STRTOL_LONG_MIN LONG_MIN
+# define STRTOL_LONG_MAX LONG_MAX
+# define STRTOL_ULONG_MAX ULONG_MAX
+#endif
+
+
+/* We use this code for the extended locale handling where the
+   function gets as an additional argument the locale which has to be
+   used.  To access the values we have to redefine the _NL_CURRENT and
+   _NL_CURRENT_WORD macros.  */
+#undef _NL_CURRENT
+#define _NL_CURRENT(category, item) \
+  (current->values[_NL_ITEM_INDEX (item)].string)
+#undef _NL_CURRENT_WORD
+#define _NL_CURRENT_WORD(category, item) \
+  ((uint32_t) current->values[_NL_ITEM_INDEX (item)].word)
+
+#if defined _LIBC || defined HAVE_WCHAR_H
+# include <wchar.h>
+#endif
+
+#ifdef USE_WIDE_CHAR
+# include <wctype.h>
+# define L_(Ch) L##Ch
+# define UCHAR_TYPE wint_t
+# define STRING_TYPE wchar_t
+# define ISSPACE(Ch) __iswspace_l ((Ch), loc)
+# define ISALPHA(Ch) __iswalpha_l ((Ch), _nl_C_locobj_ptr)
+# define TOUPPER(Ch) __towupper_l ((Ch), _nl_C_locobj_ptr)
+#else
+# if defined _LIBC \
+   || defined STDC_HEADERS || (!defined isascii && !defined HAVE_ISASCII)
+#  define IN_CTYPE_DOMAIN(c) 1
+# else
+#  define IN_CTYPE_DOMAIN(c) isascii(c)
+# endif
+# define L_(Ch) Ch
+# define UCHAR_TYPE unsigned char
+# define STRING_TYPE char
+# define ISSPACE(Ch) __isspace_l ((Ch), loc)
+# define ISALPHA(Ch) __isalpha_l ((Ch), _nl_C_locobj_ptr)
+# define TOUPPER(Ch) __toupper_l ((Ch), _nl_C_locobj_ptr)
+#endif
+
+#define INTERNAL(X) INTERNAL1(X)
+#define INTERNAL1(X) __##X##_internal
+#define WEAKNAME(X) WEAKNAME1(X)
+
+#ifdef USE_NUMBER_GROUPING
+/* This file defines a function to check for correct grouping.  */
+# include "grouping.h"
+#endif
+
+
+/* Define tables of maximum values and remainders in order to detect
+   overflow.  Do this at compile-time in order to avoid the runtime
+   overhead of the division.  */
+extern const unsigned long __strtol_ul_max_tab[] attribute_hidden;
+extern const unsigned char __strtol_ul_rem_tab[] attribute_hidden;
+#if defined(QUAD) && __WORDSIZE == 32
+extern const unsigned long long __strtol_ull_max_tab[] attribute_hidden;
+extern const unsigned char __strtol_ull_rem_tab[] attribute_hidden;
+#endif
+
+#define DEF(TYPE, NAME)							   \
+  const TYPE NAME[] attribute_hidden =					   \
+  {									   \
+    F(2), F(3), F(4), F(5), F(6), F(7), F(8), F(9), F(10), 		   \
+    F(11), F(12), F(13), F(14), F(15), F(16), F(17), F(18), F(19), F(20),  \
+    F(21), F(22), F(23), F(24), F(25), F(26), F(27), F(28), F(29), F(30),  \
+    F(31), F(32), F(33), F(34), F(35), F(36)				   \
+  }
+
+#if !UNSIGNED && !defined (USE_WIDE_CHAR) && !defined (QUAD)
+# define F(X)	ULONG_MAX / X
+  DEF (unsigned long, __strtol_ul_max_tab);
+# undef F
+# define F(X)	ULONG_MAX % X
+  DEF (unsigned char, __strtol_ul_rem_tab);
+# undef F
+#endif
+#if !UNSIGNED && !defined (USE_WIDE_CHAR) && defined (QUAD) \
+    && __WORDSIZE == 32
+# define F(X)	ULONG_LONG_MAX / X
+  DEF (unsigned long long, __strtol_ull_max_tab);
+# undef F
+# define F(X)	ULONG_LONG_MAX % X
+  DEF (unsigned char, __strtol_ull_rem_tab);
+# undef F
+#endif
+#undef DEF
+
+/* Define some more readable aliases for these arrays which correspond
+   to how they'll be used in the function below.  */
+#define jmax_tab	__strtol_ul_max_tab
+#if defined(QUAD) && __WORDSIZE == 32
+# define cutoff_tab	__strtol_ull_max_tab
+# define cutlim_tab	__strtol_ull_rem_tab
+#else
+# define cutoff_tab	__strtol_ul_max_tab
+# define cutlim_tab	__strtol_ul_rem_tab
+#endif
+
+
+/* Convert NPTR to an `unsigned long int' or `long int' in base BASE.
+   If BASE is 0 the base is determined by the presence of a leading
+   zero, indicating octal or a leading "0x" or "0X", indicating hexadecimal.
+   If BASE is < 2 or > 36, it is reset to 10.
+   If ENDPTR is not NULL, a pointer to the character after the last
+   one converted is stored in *ENDPTR.  */
+
+INT
+INTERNAL (__strtol_l) (const STRING_TYPE *nptr, STRING_TYPE **endptr,
+		       int base, int group, __locale_t loc)
+{
+  int negative;
+  unsigned LONG int cutoff;
+  unsigned int cutlim;
+  unsigned LONG int i;
+  const STRING_TYPE *s;
+  UCHAR_TYPE c;
+  const STRING_TYPE *save, *end;
+  int overflow;
+#ifndef USE_WIDE_CHAR
+  size_t cnt;
+#endif
+
+#ifdef USE_NUMBER_GROUPING
+  struct __locale_data *current = loc->__locales[LC_NUMERIC];
+  /* The thousands character of the current locale.  */
+# ifdef USE_WIDE_CHAR
+  wchar_t thousands = L'\0';
+# else
+  const char *thousands = NULL;
+  size_t thousands_len = 0;
+# endif
+  /* The numeric grouping specification of the current locale,
+     in the format described in <locale.h>.  */
+  const char *grouping;
+
+  if (__glibc_unlikely (group))
+    {
+      grouping = _NL_CURRENT (LC_NUMERIC, GROUPING);
+      if (*grouping <= 0 || *grouping == CHAR_MAX)
+	grouping = NULL;
+      else
+	{
+	  /* Figure out the thousands separator character.  */
+# ifdef USE_WIDE_CHAR
+#  ifdef _LIBC
+	  thousands = _NL_CURRENT_WORD (LC_NUMERIC,
+					_NL_NUMERIC_THOUSANDS_SEP_WC);
+#  endif
+	  if (thousands == L'\0')
+	    grouping = NULL;
+# else
+#  ifdef _LIBC
+	  thousands = _NL_CURRENT (LC_NUMERIC, THOUSANDS_SEP);
+#  endif
+	  if (*thousands == '\0')
+	    {
+	      thousands = NULL;
+	      grouping = NULL;
+	    }
+# endif
+	}
+    }
+  else
+    grouping = NULL;
+#endif
+
+  if (base < 0 || base == 1 || base > 36)
+    {
+      __set_errno (EINVAL);
+      return 0;
+    }
+
+  save = s = nptr;
+
+  /* Skip white space.  */
+  while (ISSPACE (*s))
+    ++s;
+  if (__glibc_unlikely (*s == L_('\0')))
+    goto noconv;
+
+  /* Check for a sign.  */
+  negative = 0;
+  if (*s == L_('-'))
+    {
+      negative = 1;
+      ++s;
+    }
+  else if (*s == L_('+'))
+    ++s;
+
+  /* Recognize number prefix and if BASE is zero, figure it out ourselves.  */
+  if (*s == L_('0'))
+    {
+      if ((base == 0 || base == 16) && TOUPPER (s[1]) == L_('X'))
+	{
+	  s += 2;
+	  base = 16;
+	}
+      else if (base == 0)
+	base = 8;
+    }
+  else if (base == 0)
+    base = 10;
+
+  /* Save the pointer so we can check later if anything happened.  */
+  save = s;
+
+#ifdef USE_NUMBER_GROUPING
+  if (base != 10)
+    grouping = NULL;
+
+  if (__glibc_unlikely (grouping != NULL))
+    {
+# ifndef USE_WIDE_CHAR
+      thousands_len = strlen (thousands);
+# endif
+
+      /* Find the end of the digit string and check its grouping.  */
+      end = s;
+      if (
+# ifdef USE_WIDE_CHAR
+	  *s != thousands
+# else
+	  ({ for (cnt = 0; cnt < thousands_len; ++cnt)
+	       if (thousands[cnt] != end[cnt])
+		 break;
+	     cnt < thousands_len; })
+# endif
+	  )
+	{
+	  for (c = *end; c != L_('\0'); c = *++end)
+	    if (((STRING_TYPE) c < L_('0') || (STRING_TYPE) c > L_('9'))
+# ifdef USE_WIDE_CHAR
+		&& (wchar_t) c != thousands
+# else
+		&& ({ for (cnt = 0; cnt < thousands_len; ++cnt)
+			if (thousands[cnt] != end[cnt])
+			  break;
+		      cnt < thousands_len; })
+# endif
+		&& (!ISALPHA (c)
+		    || (int) (TOUPPER (c) - L_('A') + 10) >= base))
+	      break;
+
+# ifdef USE_WIDE_CHAR
+	  end = __correctly_grouped_prefixwc (s, end, thousands, grouping);
+# else
+	  end = __correctly_grouped_prefixmb (s, end, thousands, grouping);
+# endif
+	}
+    }
+  else
+#endif
+    end = NULL;
+
+  /* Avoid runtime division; lookup cutoff and limit.  */
+  cutoff = cutoff_tab[base - 2];
+  cutlim = cutlim_tab[base - 2];
+
+  overflow = 0;
+  i = 0;
+  c = *s;
+  if (sizeof (long int) != sizeof (LONG int))
+    {
+      unsigned long int j = 0;
+      unsigned long int jmax = jmax_tab[base - 2];
+
+      for (;c != L_('\0'); c = *++s)
+	{
+	  if (s == end)
+	    break;
+	  if (c >= L_('0') && c <= L_('9'))
+	    c -= L_('0');
+#ifdef USE_NUMBER_GROUPING
+# ifdef USE_WIDE_CHAR
+	  else if (grouping && (wchar_t) c == thousands)
+	    continue;
+# else
+	  else if (thousands_len)
+	    {
+	      for (cnt = 0; cnt < thousands_len; ++cnt)
+		if (thousands[cnt] != s[cnt])
+		  break;
+	      if (cnt == thousands_len)
+		{
+		  s += thousands_len - 1;
+		  continue;
+		}
+	      if (ISALPHA (c))
+		c = TOUPPER (c) - L_('A') + 10;
+	      else
+		break;
+	    }
+# endif
+#endif
+	  else if (ISALPHA (c))
+	    c = TOUPPER (c) - L_('A') + 10;
+	  else
+	    break;
+	  if ((int) c >= base)
+	    break;
+	  /* Note that we never can have an overflow.  */
+	  else if (j >= jmax)
+	    {
+	      /* We have an overflow.  Now use the long representation.  */
+	      i = (unsigned LONG int) j;
+	      goto use_long;
+	    }
+	  else
+	    j = j * (unsigned long int) base + c;
+	}
+
+      i = (unsigned LONG int) j;
+    }
+  else
+    for (;c != L_('\0'); c = *++s)
+      {
+	if (s == end)
+	  break;
+	if (c >= L_('0') && c <= L_('9'))
+	  c -= L_('0');
+#ifdef USE_NUMBER_GROUPING
+# ifdef USE_WIDE_CHAR
+	else if (grouping && (wchar_t) c == thousands)
+	  continue;
+# else
+	else if (thousands_len)
+	  {
+	    for (cnt = 0; cnt < thousands_len; ++cnt)
+	      if (thousands[cnt] != s[cnt])
+		break;
+	    if (cnt == thousands_len)
+	      {
+		s += thousands_len - 1;
+		continue;
+	      }
+	    if (ISALPHA (c))
+	      c = TOUPPER (c) - L_('A') + 10;
+	    else
+	      break;
+	  }
+# endif
+#endif
+	else if (ISALPHA (c))
+	  c = TOUPPER (c) - L_('A') + 10;
+	else
+	  break;
+	if ((int) c >= base)
+	  break;
+	/* Check for overflow.  */
+	if (i > cutoff || (i == cutoff && c > cutlim))
+	  overflow = 1;
+	else
+	  {
+	  use_long:
+	    i *= (unsigned LONG int) base;
+	    i += c;
+	  }
+      }
+
+  /* Check if anything actually happened.  */
+  if (s == save)
+    goto noconv;
+
+  /* Store in ENDPTR the address of one character
+     past the last character we converted.  */
+  if (endptr != NULL)
+    *endptr = (STRING_TYPE *) s;
+
+#if !UNSIGNED
+  /* Check for a value that is within the range of
+     `unsigned LONG int', but outside the range of `LONG int'.  */
+  if (overflow == 0
+      && i > (negative
+	      ? -((unsigned LONG int) (STRTOL_LONG_MIN + 1)) + 1
+	      : (unsigned LONG int) STRTOL_LONG_MAX))
+    overflow = 1;
+#endif
+
+  if (__glibc_unlikely (overflow))
+    {
+      __set_errno (ERANGE);
+#if UNSIGNED
+      return STRTOL_ULONG_MAX;
+#else
+      return negative ? STRTOL_LONG_MIN : STRTOL_LONG_MAX;
+#endif
+    }
+
+  /* Return the result of the appropriate sign.  */
+  return negative ? -i : i;
+
+noconv:
+  /* We must handle a special case here: the base is 0 or 16 and the
+     first two characters are '0' and 'x', but the rest are no
+     hexadecimal digits.  This is no error case.  We return 0 and
+     ENDPTR points to the `x`.  */
+  if (endptr != NULL)
+    {
+      if (save - nptr >= 2 && TOUPPER (save[-1]) == L_('X')
+	  && save[-2] == L_('0'))
+	*endptr = (STRING_TYPE *) &save[-1];
+      else
+	/*  There was no number to convert.  */
+	*endptr = (STRING_TYPE *) nptr;
+    }
+
+  return 0L;
+}
+#if defined _LIBC && !defined USE_WIDE_CHAR
+libc_hidden_def (INTERNAL (__strtol_l))
+#endif
+
+/* External user entry point.  */
+
+#if _LIBC - 0 == 0
+
+/* Prototype.  */
+extern INT __strtol_l (const STRING_TYPE *nptr, STRING_TYPE **endptr,
+		       int base);
+#endif
+
+
+INT
+#ifdef weak_function
+weak_function
+#endif
+__strtol_l (const STRING_TYPE *nptr, STRING_TYPE **endptr,
+	    int base, __locale_t loc)
+{
+  return INTERNAL (__strtol_l) (nptr, endptr, base, 0, loc);
+}
+libc_hidden_def (__strtol_l)
+weak_alias (__strtol_l, strtol_l)
diff --git a/REORG.TODO/stdlib/strtold.c b/REORG.TODO/stdlib/strtold.c
new file mode 100644
index 0000000000..e4ace02dd0
--- /dev/null
+++ b/REORG.TODO/stdlib/strtold.c
@@ -0,0 +1,64 @@
+/* Read decimal floating point numbers.
+   This file is part of the GNU C Library.
+   Copyright (C) 1995-2017 Free Software Foundation, Inc.
+   Contributed by Ulrich Drepper <drepper@gnu.org>, 1995.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* The actual implementation for all floating point sizes is in strtod.c.
+   These macros tell it to produce the `float' version, `strtof'.  */
+
+#include <bits/long-double.h>
+
+#ifdef __LONG_DOUBLE_MATH_OPTIONAL
+# include <wchar.h>
+# define NEW(x) NEW1(x)
+# define NEW1(x) __new_##x
+long double ____new_strtold_internal (const char *, char **, int);
+long double __new_strtold (const char *, char **);
+long double ____new_wcstold_internal (const wchar_t *, wchar_t **, int);
+long double __new_wcstold (const wchar_t *, wchar_t **);
+libc_hidden_proto (____new_strtold_internal)
+libc_hidden_proto (____new_wcstold_internal)
+libc_hidden_proto (__new_strtold)
+libc_hidden_proto (__new_wcstold)
+#else
+# define NEW(x) x
+#endif
+
+#define	FLOAT		long double
+#define	FLT		LDBL
+#ifdef USE_WIDE_CHAR
+# define STRTOF		NEW (wcstold)
+# define STRTOF_L	__wcstold_l
+#else
+# define STRTOF		NEW (strtold)
+# define STRTOF_L	__strtold_l
+#endif
+
+#include "strtod.c"
+
+#ifdef __LONG_DOUBLE_MATH_OPTIONAL
+# include <math_ldbl_opt.h>
+# ifdef USE_WIDE_CHAR
+long_double_symbol (libc, __new_wcstold, wcstold);
+long_double_symbol (libc, ____new_wcstold_internal, __wcstold_internal);
+libc_hidden_ver (____new_wcstold_internal, __wcstold_internal)
+# else
+long_double_symbol (libc, __new_strtold, strtold);
+long_double_symbol (libc, ____new_strtold_internal, __strtold_internal);
+libc_hidden_ver (____new_strtold_internal, __strtold_internal)
+# endif
+#endif
diff --git a/REORG.TODO/stdlib/strtold_l.c b/REORG.TODO/stdlib/strtold_l.c
new file mode 100644
index 0000000000..bef2a4d3d7
--- /dev/null
+++ b/REORG.TODO/stdlib/strtold_l.c
@@ -0,0 +1,65 @@
+/* Copyright (C) 1999-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <math.h>
+#include <stdlib.h>
+#include <xlocale.h>
+
+#if defined _LIBC || defined HAVE_WCHAR_H
+# include <wchar.h>
+#endif
+
+#ifdef USE_WIDE_CHAR
+# define STRING_TYPE	wchar_t
+# define STRTOLD	wcstold_l
+# define __STRTOLD	__wcstold_l
+# define __STRTOD	__wcstod_l
+#else
+# define STRING_TYPE	char
+# define STRTOLD	strtold_l
+# define __STRTOLD	__strtold_l
+# define __STRTOD	__strtod_l
+#endif
+
+#define INTERNAL(x) INTERNAL1(x)
+#define INTERNAL1(x) __##x##_internal
+
+extern double INTERNAL (__STRTOD) (const STRING_TYPE *, STRING_TYPE **,
+				   int, __locale_t);
+
+/* There is no `long double' type, use the `double' implementations.  */
+long double
+INTERNAL (__STRTOLD) (const STRING_TYPE *nptr, STRING_TYPE **endptr,
+		      int group, __locale_t loc)
+{
+  return INTERNAL (__STRTOD) (nptr, endptr, group, loc);
+}
+#ifndef USE_WIDE_CHAR
+libc_hidden_def (INTERNAL (__STRTOLD))
+#endif
+
+long double
+weak_function
+__STRTOLD (const STRING_TYPE *nptr, STRING_TYPE **endptr, __locale_t loc)
+{
+  return INTERNAL (__STRTOD) (nptr, endptr, 0, loc);
+}
+#if defined _LIBC
+libc_hidden_def (__STRTOLD)
+libc_hidden_ver (__STRTOLD, STRTOLD)
+#endif
+weak_alias (__STRTOLD, STRTOLD)
diff --git a/REORG.TODO/stdlib/strtold_nan.c b/REORG.TODO/stdlib/strtold_nan.c
new file mode 100644
index 0000000000..165a3e6c0f
--- /dev/null
+++ b/REORG.TODO/stdlib/strtold_nan.c
@@ -0,0 +1,30 @@
+/* Convert string for NaN payload to corresponding NaN.  Narrow
+   strings, long double.
+   Copyright (C) 2015-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <math.h>
+
+/* This function is unused if long double and double have the same
+   representation.  */
+#ifndef __NO_LONG_DOUBLE_MATH
+# include <strtod_nan_narrow.h>
+# include <strtod_nan_ldouble.h>
+
+# define STRTOD_NAN __strtold_nan
+# include <strtod_nan_main.c>
+#endif
diff --git a/REORG.TODO/stdlib/strtoll.c b/REORG.TODO/stdlib/strtoll.c
new file mode 100644
index 0000000000..cb2207cc55
--- /dev/null
+++ b/REORG.TODO/stdlib/strtoll.c
@@ -0,0 +1,33 @@
+/* Function to parse a `long long int' from text.
+   Copyright (C) 1995-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#define	QUAD	1
+
+#include <strtol.c>
+
+#ifdef _LIBC
+# ifdef SHARED
+#  include <shlib-compat.h>
+
+#  if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_2)
+compat_symbol (libc, __strtoll_internal, __strtoq_internal, GLIBC_2_0);
+#  endif
+
+# endif
+weak_alias (strtoll, strtoq)
+#endif
diff --git a/REORG.TODO/stdlib/strtoll_l.c b/REORG.TODO/stdlib/strtoll_l.c
new file mode 100644
index 0000000000..2a712eb80e
--- /dev/null
+++ b/REORG.TODO/stdlib/strtoll_l.c
@@ -0,0 +1,27 @@
+/* Convert string representing a number to integer value, using given locale.
+   Copyright (C) 1997-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#define QUAD	1
+
+#include <xlocale.h>
+
+extern long long int ____strtoll_l_internal (const char *, char **, int, int,
+					     __locale_t);
+
+#include <strtol_l.c>
diff --git a/REORG.TODO/stdlib/strtoul.c b/REORG.TODO/stdlib/strtoul.c
new file mode 100644
index 0000000000..f72a8d50b1
--- /dev/null
+++ b/REORG.TODO/stdlib/strtoul.c
@@ -0,0 +1,20 @@
+/* Copyright (C) 1991-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#define	UNSIGNED	1
+
+#include "strtol.c"
diff --git a/REORG.TODO/stdlib/strtoul_l.c b/REORG.TODO/stdlib/strtoul_l.c
new file mode 100644
index 0000000000..6d23ee2964
--- /dev/null
+++ b/REORG.TODO/stdlib/strtoul_l.c
@@ -0,0 +1,27 @@
+/* Convert string representing a number to integer value, using given locale.
+   Copyright (C) 1997-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#define UNSIGNED	1
+
+#include <xlocale.h>
+
+extern unsigned long int ____strtoul_l_internal (const char *, char **, int,
+						 int, __locale_t);
+
+#include "strtol_l.c"
diff --git a/REORG.TODO/stdlib/strtoull.c b/REORG.TODO/stdlib/strtoull.c
new file mode 100644
index 0000000000..e3dbd849e0
--- /dev/null
+++ b/REORG.TODO/stdlib/strtoull.c
@@ -0,0 +1,33 @@
+/* Function to parse an `unsigned long long int' from text.
+   Copyright (C) 1995-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#define	QUAD	1
+
+#include <strtoul.c>
+
+#ifdef _LIBC
+# ifdef SHARED
+#  include <shlib-compat.h>
+
+#  if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_2)
+compat_symbol (libc, __strtoull_internal, __strtouq_internal, GLIBC_2_0);
+#  endif
+
+# endif
+weak_alias (strtoull, strtouq)
+#endif
diff --git a/REORG.TODO/stdlib/strtoull_l.c b/REORG.TODO/stdlib/strtoull_l.c
new file mode 100644
index 0000000000..53ecb916df
--- /dev/null
+++ b/REORG.TODO/stdlib/strtoull_l.c
@@ -0,0 +1,28 @@
+/* Convert string representing a number to integer value, using given locale.
+   Copyright (C) 1997-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#define QUAD		1
+#define UNSIGNED	1
+
+#include <xlocale.h>
+
+extern unsigned long long int ____strtoull_l_internal (const char *, char **,
+						       int, int, __locale_t);
+
+#include <strtol_l.c>
diff --git a/REORG.TODO/stdlib/strtoumax.c b/REORG.TODO/stdlib/strtoumax.c
new file mode 100644
index 0000000000..508cb19f8c
--- /dev/null
+++ b/REORG.TODO/stdlib/strtoumax.c
@@ -0,0 +1 @@
+#error "The correct implementation must be chosen based on the `uintmax_t' type"
diff --git a/REORG.TODO/stdlib/sub_n.c b/REORG.TODO/stdlib/sub_n.c
new file mode 100644
index 0000000000..7f429def89
--- /dev/null
+++ b/REORG.TODO/stdlib/sub_n.c
@@ -0,0 +1,53 @@
+/* mpn_sub_n -- Subtract two limb vectors of equal, non-zero length.
+
+Copyright (C) 1992-2017 Free Software Foundation, Inc.
+
+This file is part of the GNU MP Library.
+
+The GNU MP Library is free software; you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation; either version 2.1 of the License, or (at your
+option) any later version.
+
+The GNU MP 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 Lesser General Public
+License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with the GNU MP Library; see the file COPYING.LIB.  If not, see
+<http://www.gnu.org/licenses/>.  */
+
+#include <gmp.h>
+#include "gmp-impl.h"
+
+mp_limb_t
+mpn_sub_n (mp_ptr res_ptr, mp_srcptr s1_ptr, mp_srcptr s2_ptr, mp_size_t size)
+{
+  register mp_limb_t x, y, cy;
+  register mp_size_t j;
+
+  /* The loop counter and index J goes from -SIZE to -1.  This way
+     the loop becomes faster.  */
+  j = -size;
+
+  /* Offset the base pointers to compensate for the negative indices.  */
+  s1_ptr -= j;
+  s2_ptr -= j;
+  res_ptr -= j;
+
+  cy = 0;
+  do
+    {
+      y = s2_ptr[j];
+      x = s1_ptr[j];
+      y += cy;			/* add previous carry to subtrahend */
+      cy = (y < cy);		/* get out carry from that addition */
+      y = x - y;		/* main subtract */
+      cy = (y > x) + cy;	/* get out carry from the subtract, combine */
+      res_ptr[j] = y;
+    }
+  while (++j != 0);
+
+  return cy;
+}
diff --git a/REORG.TODO/stdlib/submul_1.c b/REORG.TODO/stdlib/submul_1.c
new file mode 100644
index 0000000000..9bc27df442
--- /dev/null
+++ b/REORG.TODO/stdlib/submul_1.c
@@ -0,0 +1,61 @@
+/* mpn_submul_1 -- multiply the S1_SIZE long limb vector pointed to by S1_PTR
+   by S2_LIMB, subtract the S1_SIZE least significant limbs of the product
+   from the limb vector pointed to by RES_PTR.  Return the most significant
+   limb of the product, adjusted for carry-out from the subtraction.
+
+Copyright (C) 1992-2017 Free Software Foundation, Inc.
+
+This file is part of the GNU MP Library.
+
+The GNU MP Library is free software; you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation; either version 2.1 of the License, or (at your
+option) any later version.
+
+The GNU MP 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 Lesser General Public
+License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with the GNU MP Library; see the file COPYING.LIB.  If not, see
+<http://www.gnu.org/licenses/>.  */
+
+#include <gmp.h>
+#include "gmp-impl.h"
+#include "longlong.h"
+
+mp_limb_t
+mpn_submul_1 (register mp_ptr res_ptr, register mp_srcptr s1_ptr,
+	      mp_size_t s1_size, register mp_limb_t s2_limb)
+{
+  register mp_limb_t cy_limb;
+  register mp_size_t j;
+  register mp_limb_t prod_high, prod_low;
+  register mp_limb_t x;
+
+  /* The loop counter and index J goes from -SIZE to -1.  This way
+     the loop becomes faster.  */
+  j = -s1_size;
+
+  /* Offset the base pointers to compensate for the negative indices.  */
+  res_ptr -= j;
+  s1_ptr -= j;
+
+  cy_limb = 0;
+  do
+    {
+      umul_ppmm (prod_high, prod_low, s1_ptr[j], s2_limb);
+
+      prod_low += cy_limb;
+      cy_limb = (prod_low < cy_limb) + prod_high;
+
+      x = res_ptr[j];
+      prod_low = x - prod_low;
+      cy_limb += (prod_low > x);
+      res_ptr[j] = prod_low;
+    }
+  while (++j != 0);
+
+  return cy_limb;
+}
diff --git a/REORG.TODO/stdlib/swapcontext.c b/REORG.TODO/stdlib/swapcontext.c
new file mode 100644
index 0000000000..decf2b9a9e
--- /dev/null
+++ b/REORG.TODO/stdlib/swapcontext.c
@@ -0,0 +1,29 @@
+/* Copyright (C) 1998-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <errno.h>
+#include <ucontext.h>
+
+int
+swapcontext (ucontext_t *oucp, const ucontext_t *ucp)
+{
+  __set_errno (ENOSYS);
+  return -1;
+}
+
+
+stub_warning (swapcontext)
diff --git a/REORG.TODO/stdlib/sys/errno.h b/REORG.TODO/stdlib/sys/errno.h
new file mode 100644
index 0000000000..339f4fc10c
--- /dev/null
+++ b/REORG.TODO/stdlib/sys/errno.h
@@ -0,0 +1 @@
+#include <errno.h>
diff --git a/REORG.TODO/stdlib/sys/random.h b/REORG.TODO/stdlib/sys/random.h
new file mode 100644
index 0000000000..90a0aca15c
--- /dev/null
+++ b/REORG.TODO/stdlib/sys/random.h
@@ -0,0 +1,42 @@
+/* Interfaces for obtaining random bytes.
+   Copyright (C) 2016-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_RANDOM_H
+#define _SYS_RANDOM_H 1
+
+#include <features.h>
+#include <sys/types.h>
+
+/* Flags for use with getrandom.  */
+#define GRND_NONBLOCK 0x01
+#define GRND_RANDOM 0x02
+
+__BEGIN_DECLS
+
+/* Write LENGTH bytes of randomness starting at BUFFER.  Return the
+   number of bytes written, or -1 on error.  */
+ssize_t getrandom (void *__buffer, size_t __length,
+                   unsigned int __flags) __wur;
+
+/* Write LENGTH bytes of randomness starting at BUFFER.  Return 0 on
+   success or -1 on error.  */
+int getentropy (void *__buffer, size_t __length) __wur;
+
+__END_DECLS
+
+#endif /* _SYS_RANDOM_H */
diff --git a/REORG.TODO/stdlib/system.c b/REORG.TODO/stdlib/system.c
new file mode 100644
index 0000000000..026ab77768
--- /dev/null
+++ b/REORG.TODO/stdlib/system.c
@@ -0,0 +1,35 @@
+/* Copyright (C) 1991-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <errno.h>
+#include <stdlib.h>
+
+
+/* Execute LINE as a shell command.  */
+int
+__libc_system (const char *line)
+{
+  if (line == NULL)
+    return 0;			/* This indicates no command processor.  */
+
+  __set_errno (ENOSYS);
+  return -1;
+}
+weak_alias (__libc_system, system)
+
+
+stub_warning (system)
diff --git a/REORG.TODO/stdlib/tens_in_limb.c b/REORG.TODO/stdlib/tens_in_limb.c
new file mode 100644
index 0000000000..b6e35aa35a
--- /dev/null
+++ b/REORG.TODO/stdlib/tens_in_limb.c
@@ -0,0 +1,31 @@
+#include <gmp.h>
+
+
+/* Definitions according to limb size used.  */
+#if	BITS_PER_MP_LIMB == 32
+# define MAX_DIG_PER_LIMB	9
+# define MAX_FAC_PER_LIMB	1000000000UL
+#elif	BITS_PER_MP_LIMB == 64
+# define MAX_DIG_PER_LIMB	19
+# define MAX_FAC_PER_LIMB	10000000000000000000ULL
+#else
+# error "mp_limb_t size " BITS_PER_MP_LIMB "not accounted for"
+#endif
+
+
+/* Local data structure.  */
+const mp_limb_t _tens_in_limb[MAX_DIG_PER_LIMB + 1] =
+{    0,                   10,                   100,
+     1000,                10000,                100000L,
+     1000000L,            10000000L,            100000000L,
+     1000000000L
+#if BITS_PER_MP_LIMB > 32
+	        ,	  10000000000ULL,       100000000000ULL,
+     1000000000000ULL,    10000000000000ULL,    100000000000000ULL,
+     1000000000000000ULL, 10000000000000000ULL, 100000000000000000ULL,
+     1000000000000000000ULL, 10000000000000000000ULL
+#endif
+#if BITS_PER_MP_LIMB > 64
+  #error "Need to expand tens_in_limb table to" MAX_DIG_PER_LIMB
+#endif
+};
diff --git a/REORG.TODO/stdlib/test-a64l.c b/REORG.TODO/stdlib/test-a64l.c
new file mode 100644
index 0000000000..b3e1b2e846
--- /dev/null
+++ b/REORG.TODO/stdlib/test-a64l.c
@@ -0,0 +1,80 @@
+/* Test program for the l64a and a64l functions.
+   Copyright (C) 2001-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Andreas Schwab <schwab@suse.de>.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+/* Prototype for our test function.  */
+extern int do_test (int argc, char *argv[]);
+#include <test-skeleton.c>
+
+struct a64l_test
+{
+  const char *base64;
+  long int value;
+};
+
+static const struct a64l_test tests[] =
+  {
+    { "./", 64 },
+    { "", 0 },
+    { "/", 1 },
+    { "FT", 2001 },
+    { "zzzzz1", 0xffffffff },
+    { "zzzz1", 0x3ffffff },
+    { "zzz1", 0xfffff },
+    { "zz1", 0x3fff },
+    { "z1", 0xff },
+    { "1", 0x3 },
+    { NULL, 0 }
+  };
+
+int
+do_test (int argc, char ** argv)
+{
+  const struct a64l_test *at;
+  long int l;
+  const char *s;
+  int status = 0;
+
+  for (at = tests; at->base64 != NULL; ++at)
+    {
+      printf ("a64l (\"%s\")", at->base64);
+      l = a64l (at->base64);
+      if (l == at->value)
+	puts ("\tOK");
+      else
+	{
+	  printf ("\tBAD\n  returns %ld, expected %ld\n", l, at->value);
+	  status = 1;
+	}
+      printf ("l64a (%ld)", at->value);
+      s = l64a (at->value);
+      if (strcmp (s, at->base64) == 0)
+	puts ("\tOK");
+      else
+	{
+	  printf ("\tBAD\n  returns \"%s\", expected \"%s\"\n", s, at->base64);
+	  status = 1;
+	}
+    }
+
+  return status ? EXIT_FAILURE : EXIT_SUCCESS;
+}
diff --git a/REORG.TODO/stdlib/test-canon.c b/REORG.TODO/stdlib/test-canon.c
new file mode 100644
index 0000000000..d664f73c45
--- /dev/null
+++ b/REORG.TODO/stdlib/test-canon.c
@@ -0,0 +1,235 @@
+/* Test program for returning the canonical absolute name of a given file.
+   Copyright (C) 1996-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by David Mosberger <davidm@azstarnet.com>.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* This file must be run from within a directory called "stdlib".  */
+
+#include <errno.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <sys/param.h>
+#include <sys/stat.h>
+
+/* Prototype for our test function.  */
+extern int do_test (int argc, char *argv[]);
+#include <test-skeleton.c>
+
+#ifndef PATH_MAX
+# define PATH_MAX 4096
+#endif
+static char	cwd[PATH_MAX];
+static size_t	cwd_len;
+
+struct {
+  const char *	name;
+  const char *	value;
+} symlinks[] = {
+  {"SYMLINK_LOOP",	"SYMLINK_LOOP"},
+  {"SYMLINK_1",		"."},
+  {"SYMLINK_2",		"//////./../../etc"},
+  {"SYMLINK_3",		"SYMLINK_1"},
+  {"SYMLINK_4",		"SYMLINK_2"},
+  {"SYMLINK_5",		"doesNotExist"},
+};
+
+struct {
+  const char * in, * out, * resolved;
+  int error;
+} tests[] = {
+  /*  0 */
+  {"/",					"/"},
+  {"/////////////////////////////////",	"/"},
+  {"/.././.././.././..///",		"/"},
+  {"/etc",				"/etc"},
+  {"/etc/../etc",			"/etc"},
+  /*  5 */
+  {"/doesNotExist/../etc",		0, "/doesNotExist", ENOENT},
+  {"./././././././././.",		"."},
+  {"/etc/.//doesNotExist",		0, "/etc/doesNotExist", ENOENT},
+  {"./doesExist",			"./doesExist"},
+  {"./doesExist/",			"./doesExist"},
+  /* 10 */
+  {"./doesExist/../doesExist",		"./doesExist"},
+  {"foobar",				0, "./foobar", ENOENT},
+  {".",					"."},
+  {"./foobar",				0, "./foobar", ENOENT},
+  {"SYMLINK_LOOP",			0, "./SYMLINK_LOOP", ELOOP},
+  /* 15 */
+  {"./SYMLINK_LOOP",			0, "./SYMLINK_LOOP", ELOOP},
+  {"SYMLINK_1",				"."},
+  {"SYMLINK_1/foobar",			0, "./foobar", ENOENT},
+  {"SYMLINK_2",				"/etc"},
+  {"SYMLINK_3",				"."},
+  /* 20 */
+  {"SYMLINK_4",				"/etc"},
+  {"../stdlib/SYMLINK_1",		"."},
+  {"../stdlib/SYMLINK_2",		"/etc"},
+  {"../stdlib/SYMLINK_3",		"."},
+  {"../stdlib/SYMLINK_4",		"/etc"},
+  /* 25 */
+  {"./SYMLINK_5",			0, "./doesNotExist", ENOENT},
+  {"SYMLINK_5",				0, "./doesNotExist", ENOENT},
+  {"SYMLINK_5/foobar",			0, "./doesNotExist", ENOENT},
+  {"doesExist/../../stdlib/doesExist",	"./doesExist"},
+  {"doesExist/.././../stdlib/.",	"."},
+  /* 30 */
+  {"./doesExist/someFile/",		0, "./doesExist/someFile", ENOTDIR},
+  {"./doesExist/someFile/..",		0, "./doesExist/someFile", ENOTDIR},
+};
+
+
+static int
+check_path (const char * result, const char * expected)
+{
+  int good;
+
+  if (!result)
+    return (expected == NULL);
+
+  if (!expected)
+    return 0;
+
+  if (expected[0] == '.' && (expected[1] == '/' || expected[1] == '\0'))
+    good = (strncmp (result, cwd, cwd_len) == 0
+	    && strcmp (result + cwd_len, expected + 1) == 0);
+  else
+    good = (strcmp (expected, result) == 0);
+
+  return good;
+}
+
+
+int
+do_test (int argc, char ** argv)
+{
+  char * result;
+  int i, errors = 0;
+  char buf[PATH_MAX];
+
+  getcwd (cwd, sizeof(buf));
+  cwd_len = strlen (cwd);
+
+  errno = 0;
+  if (realpath (NULL, buf) != NULL || errno != EINVAL)
+    {
+      printf ("%s: expected return value NULL and errno set to EINVAL"
+	      " for realpath(NULL,...)\n", argv[0]);
+      ++errors;
+    }
+
+#if 0
+  /* This is now allowed.  The test is invalid.  */
+  errno = 0;
+  if (realpath ("/", NULL) != NULL || errno != EINVAL)
+    {
+      printf ("%s: expected return value NULL and errno set to EINVAL"
+	      " for realpath(...,NULL)\n", argv[0]);
+      ++errors;
+    }
+#endif
+
+  errno = 0;
+  if (realpath ("", buf) != NULL || errno != ENOENT)
+    {
+      printf ("%s: expected return value NULL and set errno to ENOENT"
+	      " for realpath(\"\",...)\n", argv[0]);
+      ++errors;
+    }
+
+  for (i = 0; i < (int) (sizeof (symlinks) / sizeof (symlinks[0])); ++i)
+    symlink (symlinks[i].value, symlinks[i].name);
+
+  int has_dir = mkdir ("doesExist", 0777) == 0;
+
+  int fd = has_dir ? creat ("doesExist/someFile", 0777) : -1;
+
+  for (i = 0; i < (int) (sizeof (tests) / sizeof (tests[0])); ++i)
+    {
+      buf[0] = '\0';
+      result = realpath (tests[i].in, buf);
+
+      if (!check_path (result, tests[i].out))
+	{
+	  printf ("%s: flunked test %d (expected `%s', got `%s')\n",
+		  argv[0], i, tests[i].out ? tests[i].out : "NULL",
+		  result ? result : "NULL");
+	  ++errors;
+	  continue;
+	}
+
+      if (!check_path (buf, tests[i].out ? tests[i].out : tests[i].resolved))
+	{
+	  printf ("%s: flunked test %d (expected resolved `%s', got `%s')\n",
+		  argv[0], i, tests[i].out ? tests[i].out : tests[i].resolved,
+		  buf);
+	  ++errors;
+	  continue;
+	}
+
+      if (!tests[i].out && errno != tests[i].error)
+	{
+	  printf ("%s: flunked test %d (expected errno %d, got %d)\n",
+		  argv[0], i, tests[i].error, errno);
+	  ++errors;
+	  continue;
+	}
+
+      char *result2 = realpath (tests[i].in, NULL);
+      if ((result2 == NULL && result != NULL)
+	  || (result2 != NULL && strcmp (result, result2) != 0))
+	{
+	  printf ("\
+%s: realpath(..., NULL) produced different result than realpath(..., buf): '%s' vs '%s'\n",
+		  argv[0], result2, result);
+	  ++errors;
+	}
+      free (result2);
+    }
+
+  getcwd (buf, sizeof(buf));
+  if (strcmp (buf, cwd))
+    {
+      printf ("%s: current working directory changed from %s to %s\n",
+	      argv[0], cwd, buf);
+      ++errors;
+    }
+
+  if (fd >= 0)
+    {
+      close (fd);
+      unlink ("doesExist/someFile");
+    }
+
+  if (has_dir)
+    rmdir ("doesExist");
+
+  for (i = 0; i < (int) (sizeof (symlinks) / sizeof (symlinks[0])); ++i)
+    unlink (symlinks[i].name);
+
+  if (errors != 0)
+    {
+      printf ("%d errors.\n", errors);
+      return EXIT_FAILURE;
+    }
+
+  puts ("No errors.");
+  return EXIT_SUCCESS;
+}
diff --git a/REORG.TODO/stdlib/test-canon2.c b/REORG.TODO/stdlib/test-canon2.c
new file mode 100644
index 0000000000..bb676cd865
--- /dev/null
+++ b/REORG.TODO/stdlib/test-canon2.c
@@ -0,0 +1,74 @@
+/* Test for realpath/canonicalize function.
+   Copyright (C) 1998-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <errno.h>
+#include <string.h>
+
+
+/* Prototype for our test function.  */
+extern void do_prepare (int argc, char *argv[]);
+extern int do_test (int argc, char *argv[]);
+
+/* We have a preparation function.  */
+#define PREPARE do_prepare
+
+#include <test-skeleton.c>
+
+/* Name of the temporary files we create.  */
+char *name1;
+char *name2;
+
+/* Preparation.  */
+void
+do_prepare (int argc, char *argv[])
+{
+  size_t test_dir_len;
+
+  test_dir_len = strlen (test_dir);
+
+  /* Generate the circular symlinks.  */
+  name1 = malloc (test_dir_len + sizeof ("/canonXXXXXX"));
+  mempcpy (mempcpy (name1, test_dir, test_dir_len),
+	   "/canonXXXXXX", sizeof ("/canonXXXXXX"));
+  name2 = strdup (name1);
+
+  add_temp_file (mktemp (name1));
+  add_temp_file (mktemp (name2));
+}
+
+
+/* Run the test.  */
+int
+do_test (int argc, char *argv[])
+{
+  char *canon;
+
+  printf ("create symlinks from %s to %s and vice versa\n", name1, name2);
+  if (symlink (name1, name2) == -1
+      || symlink (name2, name1) == -1)
+    /* We cannot test this.  */
+    return 0;
+
+  /* Call the function.  This is equivalent the using `realpath' but the
+     function allocates the room for the result.  */
+  errno = 0;
+  canon = canonicalize_file_name (name1);
+
+  return canon != NULL || errno != ELOOP;
+}
diff --git a/REORG.TODO/stdlib/testdiv.c b/REORG.TODO/stdlib/testdiv.c
new file mode 100644
index 0000000000..4ba3843c69
--- /dev/null
+++ b/REORG.TODO/stdlib/testdiv.c
@@ -0,0 +1,39 @@
+/* Copyright (C) 1992-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <stdlib.h>
+#include <stdio.h>
+
+int
+main (void)
+{
+  int err = 0;
+  int i, j;
+  while (scanf ("%d %d\n", &i, &j) == 2)
+    {
+      div_t d = div (i, j);
+      printf ("%d / %d = %d + %d/%d", i, j, d.quot, d.rem, j);
+      if (i == d.quot * j + d.rem)
+	fputs ("  OK\n", stdout);
+      else
+	{
+	  fputs ("  FAILED\n", stdout);
+	  err = 1;
+	}
+    }
+  return err;
+}
diff --git a/REORG.TODO/stdlib/testdiv.input b/REORG.TODO/stdlib/testdiv.input
new file mode 100644
index 0000000000..415b7b4f54
--- /dev/null
+++ b/REORG.TODO/stdlib/testdiv.input
@@ -0,0 +1,2 @@
+10 3
+-10 3
diff --git a/REORG.TODO/stdlib/testmb.c b/REORG.TODO/stdlib/testmb.c
new file mode 100644
index 0000000000..45dae7db61
--- /dev/null
+++ b/REORG.TODO/stdlib/testmb.c
@@ -0,0 +1,65 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+int
+main (int argc, char *argv[])
+{
+  wchar_t w[10];
+  char c[10];
+  int i;
+  int lose = 0;
+
+  i = mbstowcs (w, "bar", 4);
+  if (!(i == 3 && w[1] == 'a'))
+    {
+      puts ("mbstowcs FAILED!");
+      lose = 1;
+    }
+
+  mbstowcs (w, "blah", 5);
+  i = wcstombs (c, w, 10);
+  if (i != 4)
+    {
+      puts ("wcstombs FAILED!");
+      lose = 1;
+    }
+
+  if (mblen ("foobar", 7) != 1)
+    {
+      puts ("mblen 1 FAILED!");
+      lose = 1;
+    }
+
+  if (mblen ("", 1) != 0)
+    {
+      puts ("mblen 2 FAILED!");
+      lose = 1;
+    }
+
+  {
+    int r;
+    char c = 'x';
+    wchar_t wc;
+    char mbc[MB_CUR_MAX];
+
+    if ((r = mbtowc (&wc, &c, MB_CUR_MAX)) <= 0)
+      {
+	printf ("conversion to wide failed, result: %d\n", r);
+	lose = 1;
+      }
+    else
+      {
+	printf ("wide value: 0x%04lx\n", (unsigned long) wc);
+	mbc[0] = '\0';
+	if ((r = wctomb (mbc, wc)) <= 0)
+	  {
+	    printf ("conversion to multibyte failed, result: %d\n", r);
+	    lose = 1;
+	  }
+      }
+
+  }
+
+  puts (lose ? "Test FAILED!" : "Test succeeded.");
+  return lose;
+}
diff --git a/REORG.TODO/stdlib/testmb2.c b/REORG.TODO/stdlib/testmb2.c
new file mode 100644
index 0000000000..3a3e354629
--- /dev/null
+++ b/REORG.TODO/stdlib/testmb2.c
@@ -0,0 +1,31 @@
+/* Test case by Miloslav Trmac <mitr@volny.cz>.  */
+#include <locale.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <stdio.h>
+
+int
+main (void)
+{
+  wchar_t wc;
+
+  if (setlocale (LC_CTYPE, "de_DE.UTF-8") == NULL)
+    {
+      puts ("setlocale failed");
+      return 1;
+    }
+
+  if (mbtowc (&wc, "\xc3\xa1", MB_CUR_MAX) != 2 || wc != 0xE1)
+    {
+      puts ("1st mbtowc failed");
+      return 1;
+    }
+
+  if (mbtowc (&wc, "\xc3\xa1", SIZE_MAX) != 2 || wc != 0xE1)
+    {
+      puts ("2nd mbtowc failed");
+      return 1;
+    }
+
+  return 0;
+}
diff --git a/REORG.TODO/stdlib/testrand.c b/REORG.TODO/stdlib/testrand.c
new file mode 100644
index 0000000000..fdfc4e5694
--- /dev/null
+++ b/REORG.TODO/stdlib/testrand.c
@@ -0,0 +1,52 @@
+/* Copyright (C) 1992-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <stdlib.h>
+#include <stdio.h>
+
+int
+main (void)
+{
+  int i1, i2;
+  int j1, j2;
+
+  /* The C standard says that "If rand is called before any calls to
+     srand have been made, the same sequence shall be generated as
+     when srand is first called with a seed value of 1." */
+  i1 = rand();
+  i2 = rand();
+  srand (1);
+  j1 = rand();
+  j2 = rand();
+  if (i1 < 0 || i2 < 0 || j1 < 0 || j2 < 0) {
+      puts ("Test FAILED!");
+  }
+  if (j1 == i1 && j2 == i2)
+    {
+      puts ("Test succeeded.");
+      return 0;
+    }
+  else
+    {
+      if (j1 != i1)
+	printf ("%d != %d\n", j1, i1);
+      if (j2 != i2)
+	printf ("%d != %d\n", j2, i2);
+      puts ("Test FAILED!");
+      return 1;
+    }
+}
diff --git a/REORG.TODO/stdlib/testsort.c b/REORG.TODO/stdlib/testsort.c
new file mode 100644
index 0000000000..aa4332a568
--- /dev/null
+++ b/REORG.TODO/stdlib/testsort.c
@@ -0,0 +1,36 @@
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+
+static int
+compare (const void *a, const void *b)
+{
+  return strcmp (*(char **) a, *(char **) b);
+}
+
+int
+main (void)
+{
+  char bufs[500][20];
+  char *lines[500];
+  size_t lens[500];
+  size_t i, j;
+
+  srandom (1);
+
+  for (i = 0; i < 500; ++i)
+    {
+      lens[i] = random() % 19;
+      lines[i] = bufs[i];
+      for (j = 0; j < lens[i]; ++j)
+	lines[i][j] = random() % 26 + 'a';
+      lines[i][j] = '\0';
+    }
+
+  qsort (lines, 500, sizeof (char *), compare);
+
+  for (i = 0; i < 500 && lines[i] != NULL; ++i)
+    puts (lines[i]);
+
+  return 0;
+}
diff --git a/REORG.TODO/stdlib/tst-atof1.c b/REORG.TODO/stdlib/tst-atof1.c
new file mode 100644
index 0000000000..879d866558
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-atof1.c
@@ -0,0 +1,19 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+static int
+do_test (void)
+{
+  char buf[100];
+  snprintf (buf, sizeof (buf), "%g", atof ("0x10p-1"));
+  if (strcmp (buf, "8") != 0)
+    {
+      printf ("got \"%s\", expected \"8\"\n", buf);
+      return 1;
+    }
+  return 0;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-atof2.c b/REORG.TODO/stdlib/tst-atof2.c
new file mode 100644
index 0000000000..74dac87b0d
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-atof2.c
@@ -0,0 +1,55 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+
+static const struct
+{
+  const char *str;
+  const char *expected;
+} tests[] =
+  {
+    { "1e308", "1e+308" },
+    { "100000000e300", "1e+308" },
+    { "0x1p1023", "8.98847e+307" },
+    { "0x1000p1011", "8.98847e+307" },
+    { "0x1p1020", "1.12356e+307" },
+    { "0x0.00001p1040", "1.12356e+307" },
+    { "1e-307", "1e-307" },
+    { "0.000001e-301", "1e-307" },
+    { "0.0000001e-300", "1e-307" },
+    { "0.00000001e-299", "1e-307" },
+    { "1000000e-313", "1e-307" },
+    { "10000000e-314", "1e-307" },
+    { "100000000e-315", "1e-307" },
+    { "0x1p-1021", "4.45015e-308" },
+    { "0x1000p-1033", "4.45015e-308" },
+    { "0x10000p-1037", "4.45015e-308" },
+    { "0x0.001p-1009", "4.45015e-308" },
+    { "0x0.0001p-1005", "4.45015e-308" },
+  };
+#define NTESTS (sizeof (tests) / sizeof (tests[0]))
+
+
+static int
+do_test (void)
+{
+  int status = 0;
+
+  for (int i = 0; i < NTESTS; ++i)
+    {
+      char buf[100];
+      snprintf (buf, sizeof (buf), "%g", atof (tests[i].str));
+      if (strcmp (buf, tests[i].expected) != 0)
+	{
+	  printf ("%d: got \"%s\", expected \"%s\"\n",
+		  i, buf, tests[i].expected);
+	  status = 1;
+	}
+    }
+
+  return status;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-bsearch.c b/REORG.TODO/stdlib/tst-bsearch.c
new file mode 100644
index 0000000000..766b11bc61
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-bsearch.c
@@ -0,0 +1,153 @@
+/* Copyright (C) 2000-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@redhat.com>, 2000.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <tst-stack-align.h>
+
+struct item
+{
+  int val;
+  const char *str;
+} arr[] =
+{
+  { 0, "zero" },
+  { 1, "one" },
+  { 2, "two" },
+  { 3, "three" },
+  { 4, "four" },
+  { 5, "five" },
+  { 6, "six" },
+  { 7, "seven" },
+  { 8, "eight" },
+  { 9, "nine" },
+  { 10, "ten" }
+};
+#define narr (sizeof (arr) / sizeof (arr[0]))
+
+static int align_check;
+
+static int
+comp (const void *p1, const void *p2)
+{
+  struct item *e1 = (struct item *) p1;
+  struct item *e2 = (struct item *) p2;
+
+  if (!align_check)
+    align_check = TEST_STACK_ALIGN () ? -1 : 1;
+
+  return e1->val - e2->val;
+}
+
+
+static int
+do_test (void)
+{
+  size_t cnt;
+  int result = 0;
+  struct item key;
+  struct item *res;
+
+  for (cnt = 0; cnt < narr; ++cnt)
+    {
+
+      key.val = arr[cnt].val;
+
+      res = (struct item *) bsearch (&key, arr, narr, sizeof (arr[0]), comp);
+      if (res == NULL)
+	{
+	  printf ("entry %zd not found\n", cnt);
+	  result = 1;
+	}
+      else if (res != &arr[cnt])
+	{
+	  puts ("wrong entry returned");
+	  result = 1;
+	}
+    }
+
+  /* And some special tests that shouldn't find any entry.  */
+  key.val = -1;
+  res = (struct item *) bsearch (&key, arr, narr, sizeof (arr[0]), comp);
+  if (res != NULL)
+    {
+      puts ("found an entry that's not there");
+      result = 1;
+    }
+
+  key.val = 11;
+  res = (struct item *) bsearch (&key, arr, narr, sizeof (arr[0]), comp);
+  if (res != NULL)
+    {
+      puts ("found an entry that's not there");
+      result = 1;
+    }
+
+  key.val = 11;
+  res = (struct item *) bsearch (&key, arr, 0, sizeof (arr[0]), comp);
+  if (res != NULL)
+    {
+      puts ("found an entry that's not there");
+      result = 1;
+    }
+
+  /* Now the array contains only one element - no entry should be found.  */
+  for (cnt = 0; cnt < narr; ++cnt)
+    {
+      key.val = arr[cnt].val;
+
+      res = (struct item *) bsearch (&key, &arr[5], 1, sizeof (arr[0]), comp);
+      if (cnt == 5)
+	{
+	  if (res == NULL)
+	    {
+	      printf ("entry %zd not found\n", cnt);
+	      result = 1;
+	    }
+	  else if (res != &arr[cnt])
+	    {
+	      puts ("wrong entry returned");
+	      result = 1;
+	    }
+	}
+      else if (res != NULL)
+	{
+	  puts ("found an entry that's not there");
+	  result = 1;
+	}
+    }
+
+  if (align_check == 0)
+    {
+      puts ("alignment not checked");
+      result = 1;
+    }
+  else if (align_check == -1)
+    {
+      puts ("stack not sufficiently aligned");
+      result = 1;
+    }
+
+  if (result == 0)
+    puts ("all OK");
+
+  return result;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-empty-env.c b/REORG.TODO/stdlib/tst-empty-env.c
new file mode 100644
index 0000000000..0b0651d530
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-empty-env.c
@@ -0,0 +1,58 @@
+/* Test that passing a NULL value does not hang environment traversal in
+   tunables.
+   Copyright (C) 2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* The test is useful only when the source is configured with
+   --enable-hardcoded-path-in-tests since otherwise the execve just picks up
+   the system dynamic linker.  */
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <errno.h>
+
+static int
+do_test (int argc, char **argv)
+{
+  if (argc == 2)
+    return 0;
+
+  char envname[] = "FOOBAR";
+  char *filename = program_invocation_name;
+  char *newargv[] = {filename, filename, NULL};
+  char *newenviron[] = {envname, NULL};
+
+   /* This was reported in Fedora:
+
+      https://bugzilla.redhat.com/show_bug.cgi?id=1414589
+
+      If one of the environment variables has no value, then the environment
+      traversal must skip and also advance to the next environment entry.  The
+      bug in question would cause this test to hang in an infinite loop.  */
+  int ret = execve (filename, newargv, newenviron);
+
+  if (ret != 0)
+    printf ("execve failed: %m");
+
+  /* We will reach here only if we fail execve.  */
+  return 1;
+}
+
+#define TIMEOUT 3
+#define TEST_FUNCTION_ARGV do_test
+#include <support/test-driver.c>
diff --git a/REORG.TODO/stdlib/tst-environ.c b/REORG.TODO/stdlib/tst-environ.c
new file mode 100644
index 0000000000..b2301641f5
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-environ.c
@@ -0,0 +1,229 @@
+/* Copyright (C) 1999-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <errno.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <libc-diag.h>
+
+#define VAR "FOOBAR"
+
+char putenv_val[100] = VAR "=some longer value";
+
+static int
+do_test (void)
+{
+  int result = 0;
+  const char *valp;
+
+  /* First test: remove entry FOOBAR, whether it exists or not.  */
+  unsetenv (VAR);
+
+  /* Now getting the value should fail.  */
+  if (getenv (VAR) != NULL)
+    {
+      printf ("There should be no `%s' value\n", VAR);
+      result = 1;
+    }
+
+  /* Now add a value, with the replace flag cleared.  */
+  if (setenv (VAR, "one", 0) != 0)
+    {
+      printf ("setenv #1 failed: %m\n");
+      result = 1;
+    }
+
+  /* Getting this value should now be possible.  */
+  valp = getenv (VAR);
+  if (valp == NULL || strcmp (valp, "one") != 0)
+    {
+      puts ("getenv #2 failed");
+      result = 1;
+    }
+
+  /* Try to replace without the replace flag set.  This should fail.  */
+  if (setenv (VAR, "two", 0) != 0)
+    {
+      printf ("setenv #2 failed: %m\n");
+      result = 1;
+    }
+
+  /* The value shouldn't have changed.  */
+  valp = getenv (VAR);
+  if (valp == NULL || strcmp (valp, "one") != 0)
+    {
+      puts ("getenv #3 failed");
+      result = 1;
+    }
+
+  /* Now replace the value using putenv.  */
+  if (putenv (putenv_val) != 0)
+    {
+      printf ("putenv #1 failed: %m\n");
+      result = 1;
+    }
+
+  /* The value should have changed now.  */
+  valp = getenv (VAR);
+  if (valp == NULL || strcmp (valp, "some longer value") != 0)
+    {
+      printf ("getenv #4 failed (is \"%s\")\n", valp);
+      result = 1;
+    }
+
+  /* Now one tricky check: changing the variable passed in putenv should
+     change the environment.  */
+  strcpy (&putenv_val[sizeof VAR], "a short one");
+
+  /* The value should have changed again.  */
+  valp = getenv (VAR);
+  if (valp == NULL || strcmp (valp, "a short one") != 0)
+    {
+      puts ("getenv #5 failed");
+      result = 1;
+    }
+
+  /* It should even be possible to rename the variable.  */
+  strcpy (putenv_val, "XYZZY=some other value");
+
+  /* Now a lookup using the old name should fail.  */
+  if (getenv (VAR) != NULL)
+    {
+      puts ("getenv #6 failed");
+      result = 1;
+    }
+
+  /* But using the new name it should work.  */
+  valp = getenv ("XYZZY");
+  if (valp == NULL || strcmp (valp, "some other value") != 0)
+    {
+      puts ("getenv #7 failed");
+      result = 1;
+    }
+
+  /* Create a new variable with the old name.  */
+  if (setenv (VAR, "a new value", 0) != 0)
+    {
+      printf ("setenv #3 failed: %m\n");
+      result = 1;
+    }
+
+  /* At this point a getenv call must return the new value.  */
+  valp = getenv (VAR);
+  if (valp == NULL || strcmp (valp, "a new value") != 0)
+    {
+      puts ("getenv #8 failed");
+      result = 1;
+    }
+
+  /* Black magic: rename the variable we added using putenv back.  */
+  strcpy (putenv_val, VAR "=old name new value");
+
+  /* This is interesting.  We have two variables with the same name.
+     Getting a value should return one of them.  */
+  valp = getenv (VAR);
+  if (valp == NULL
+      || (strcmp (valp, "a new value") != 0
+	  && strcmp (valp, "old name new value") != 0))
+    {
+      puts ("getenv #9 failed");
+      result = 1;
+    }
+
+  /* More fun ahead: we are now removing the variable.  This should remove
+     both values.  The cast is ok: this call should never put the string
+     in the environment and it should never modify it.  */
+  putenv ((char *) VAR);
+
+  /* Getting the value should now fail.  */
+  if (getenv (VAR) != NULL)
+    {
+      printf ("getenv #10 failed (\"%s\" found)\n", getenv (VAR));
+      result = 1;
+    }
+
+  /* Now a test with an environment variable that's one character long.
+     This is to test a special case in the getenv implementation.  */
+  strcpy (putenv_val, "X=one character test");
+  if (putenv (putenv_val) != 0)
+    {
+      printf ("putenv #2 failed: %m\n");
+      result = 1;
+    }
+
+  valp = getenv ("X");
+  if (valp == NULL || strcmp (valp, "one character test") != 0)
+    {
+      puts ("getenv #11 failed");
+      result = 1;
+    }
+
+  /* Both setenv and unsetenv should return -1/EINVAL for NULL or "" name
+     or if name contains '=' character.  */
+  errno = 0;
+  if (setenv (NULL, "val", 1) >= 0 || errno != EINVAL)
+    {
+      puts ("setenv #4 failed");
+      result = 1;
+    }
+
+  errno = 0;
+  if (setenv ("", "val", 0) >= 0 || errno != EINVAL)
+    {
+      puts ("setenv #5 failed");
+      result = 1;
+    }
+
+  errno = 0;
+  if (setenv ("var=val", "val", 1) >= 0 || errno != EINVAL)
+    {
+      puts ("setenv #6 failed");
+      result = 1;
+    }
+
+  /* This deliberately tests supplying a null pointer to a function whose
+     argument is marked __attribute__ ((nonnull)). */
+  DIAG_PUSH_NEEDS_COMMENT;
+  DIAG_IGNORE_NEEDS_COMMENT(5, "-Wnonnull");
+  errno = 0;
+  if (unsetenv (NULL) >= 0 || errno != EINVAL)
+    {
+      puts ("unsetenv #1 failed");
+      result = 1;
+    }
+  DIAG_POP_NEEDS_COMMENT;
+
+  errno = 0;
+  if (unsetenv ("") >= 0 || errno != EINVAL)
+    {
+      puts ("unsetenv #2 failed");
+      result = 1;
+    }
+
+  errno = 0;
+  if (unsetenv ("x=y") >= 0 || errno != EINVAL)
+    {
+      puts ("unsetenv #3 failed");
+      result = 1;
+    }
+
+  return result;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-fmtmsg.c b/REORG.TODO/stdlib/tst-fmtmsg.c
new file mode 100644
index 0000000000..b7948c5f1e
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-fmtmsg.c
@@ -0,0 +1,85 @@
+#include <fmtmsg.h>
+#include <mcheck.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+
+#define MM_TEST 10
+
+static int
+do_test (void)
+{
+  int result = 0;
+
+  mtrace ();
+
+  char TEST[] = "ABCD";
+  if (addseverity (MM_TEST, TEST) != MM_OK)
+    {
+      puts ("addseverity failed");
+      result = 1;
+    }
+  strcpy (TEST, "TEST");
+
+  if (fmtmsg (MM_PRINT, "GLIBC:tst-fmtmsg", MM_HALT, "halt",
+	      "should print message for MM_HALT", "GLIBC:tst-fmtmsg:1")
+      != MM_OK)
+    result = 1;
+
+  if (fmtmsg (MM_PRINT, "GLIBC:tst-fmtmsg", MM_ERROR, "halt",
+	      "should print message for MM_ERROR", "GLIBC:tst-fmtmsg:2")
+      != MM_OK)
+    result = 1;
+
+  if (fmtmsg (MM_PRINT, "GLIBC:tst-fmtmsg", MM_WARNING, "halt",
+	      "should print message for MM_WARNING", "GLIBC:tst-fmtmsg:3")
+      != MM_OK)
+    result = 1;
+
+  if (fmtmsg (MM_PRINT, "GLIBC:tst-fmtmsg", MM_INFO, "halt",
+	      "should print message for MM_INFO", "GLIBC:tst-fmtmsg:4")
+      != MM_OK)
+    result = 1;
+
+  if (fmtmsg (MM_PRINT, "GLIBC:tst-fmtmsg", MM_NOSEV, "halt",
+	      "should print message for MM_NOSEV", "GLIBC:tst-fmtmsg:5")
+      != MM_OK)
+    result = 1;
+
+  if (fmtmsg (MM_PRINT, "GLIBC:tst-fmtmsg", MM_TEST, "halt",
+	      "should print message for MM_TEST", "GLIBC:tst-fmtmsg:6")
+      != MM_OK)
+    result = 1;
+
+  if (addseverity (MM_TEST, NULL) != MM_OK)
+    {
+      puts ("second addseverity failed");
+      result = 1;
+    }
+
+  if (addseverity (MM_TEST, NULL) != MM_NOTOK)
+    {
+      puts ("third addseverity unexpectedly succeeded");
+      result = 1;
+    }
+
+  char *p = strdup ("TEST2");
+  if (addseverity (MM_TEST, p) != MM_OK)
+    {
+      puts ("fourth addseverity failed");
+      result = 1;
+    }
+  if (addseverity (MM_TEST, "TEST3") != MM_OK)
+    {
+      puts ("fifth addseverity failed");
+      result = 1;
+    }
+
+  free (p);
+
+  return result;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-fmtmsg.sh b/REORG.TODO/stdlib/tst-fmtmsg.sh
new file mode 100755
index 0000000000..bcbe2e3348
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-fmtmsg.sh
@@ -0,0 +1,337 @@
+#!/bin/sh
+# Test of fmtmsg function family.
+# Copyright (C) 2000-2017 Free Software Foundation, Inc.
+# This file is part of the GNU C Library.
+
+# The GNU C Library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+
+# The GNU C 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
+# Lesser General Public License for more details.
+
+# You should have received a copy of the GNU Lesser General Public
+# License along with the GNU C Library; if not, see
+# <http://www.gnu.org/licenses/>.
+
+set -e
+
+common_objpfx=$1
+test_program_prefix_before_env=$2
+run_program_env=$3
+test_program_prefix_after_env=$4
+objpfx=$5
+
+test_pre="${test_program_prefix_before_env} ${run_program_env}"
+test="${test_program_prefix_after_env} ${objpfx}tst-fmtmsg"
+out=${objpfx}tst-fmtmsg.out
+
+($test_pre MSGVERB= $test || exit 1;
+ $test_pre MSGVERB=label $test || exit 1;
+ $test_pre MSGVERB=severity $test || exit 1;
+ $test_pre MSGVERB=severity:label $test || exit 1;
+ $test_pre MSGVERB=text $test || exit 1;
+ $test_pre MSGVERB=text:label $test || exit 1;
+ $test_pre MSGVERB=text:severity $test || exit 1;
+ $test_pre MSGVERB=text:severity:label $test || exit 1;
+ $test_pre MSGVERB=action $test || exit 1;
+ $test_pre MSGVERB=action:label $test || exit 1;
+ $test_pre MSGVERB=action:severity $test || exit 1;
+ $test_pre MSGVERB=action:severity:label $test || exit 1;
+ $test_pre MSGVERB=action:text $test || exit 1;
+ $test_pre MSGVERB=action:text:label $test || exit 1;
+ $test_pre MSGVERB=action:text:severity $test || exit 1;
+ $test_pre MSGVERB=action:text:severity:label $test || exit 1;
+ $test_pre MSGVERB=tag $test || exit 1;
+ $test_pre MSGVERB=tag:label $test || exit 1;
+ $test_pre MSGVERB=tag:severity $test || exit 1;
+ $test_pre MSGVERB=tag:severity:label $test || exit 1;
+ $test_pre MSGVERB=tag:text $test || exit 1;
+ $test_pre MSGVERB=tag:text:label $test || exit 1;
+ $test_pre MSGVERB=tag:text:severity $test || exit 1;
+ $test_pre MSGVERB=tag:text:severity:label $test || exit 1;
+ $test_pre MSGVERB=tag:action $test || exit 1;
+ $test_pre MSGVERB=tag:action:label $test || exit 1;
+ $test_pre MSGVERB=tag:action:severity $test || exit 1;
+ $test_pre MSGVERB=tag:action:severity:label $test || exit 1;
+ $test_pre MSGVERB=tag:action:text $test || exit 1;
+ $test_pre MSGVERB=tag:action:text:label $test || exit 1;
+ $test_pre MSGVERB=tag:action:text:severity $test || exit 1;
+ $test_pre MSGVERB=tag:action:text:severity:label $test || exit 1;) 2> $out
+
+cmp $out <<EOF
+GLIBC:tst-fmtmsg: HALT: halt
+TO FIX: should print message for MM_HALT  GLIBC:tst-fmtmsg:1
+GLIBC:tst-fmtmsg: ERROR: halt
+TO FIX: should print message for MM_ERROR  GLIBC:tst-fmtmsg:2
+GLIBC:tst-fmtmsg: WARNING: halt
+TO FIX: should print message for MM_WARNING  GLIBC:tst-fmtmsg:3
+GLIBC:tst-fmtmsg: INFO: halt
+TO FIX: should print message for MM_INFO  GLIBC:tst-fmtmsg:4
+GLIBC:tst-fmtmsg: halt
+TO FIX: should print message for MM_NOSEV  GLIBC:tst-fmtmsg:5
+GLIBC:tst-fmtmsg: TEST: halt
+TO FIX: should print message for MM_TEST  GLIBC:tst-fmtmsg:6
+GLIBC:tst-fmtmsg
+GLIBC:tst-fmtmsg
+GLIBC:tst-fmtmsg
+GLIBC:tst-fmtmsg
+GLIBC:tst-fmtmsg
+GLIBC:tst-fmtmsg
+HALT
+ERROR
+WARNING
+INFO
+
+TEST
+GLIBC:tst-fmtmsg: HALT
+GLIBC:tst-fmtmsg: ERROR
+GLIBC:tst-fmtmsg: WARNING
+GLIBC:tst-fmtmsg: INFO
+GLIBC:tst-fmtmsg
+GLIBC:tst-fmtmsg: TEST
+halt
+halt
+halt
+halt
+halt
+halt
+GLIBC:tst-fmtmsg: halt
+GLIBC:tst-fmtmsg: halt
+GLIBC:tst-fmtmsg: halt
+GLIBC:tst-fmtmsg: halt
+GLIBC:tst-fmtmsg: halt
+GLIBC:tst-fmtmsg: halt
+HALT: halt
+ERROR: halt
+WARNING: halt
+INFO: halt
+halt
+TEST: halt
+GLIBC:tst-fmtmsg: HALT: halt
+GLIBC:tst-fmtmsg: ERROR: halt
+GLIBC:tst-fmtmsg: WARNING: halt
+GLIBC:tst-fmtmsg: INFO: halt
+GLIBC:tst-fmtmsg: halt
+GLIBC:tst-fmtmsg: TEST: halt
+TO FIX: should print message for MM_HALT
+TO FIX: should print message for MM_ERROR
+TO FIX: should print message for MM_WARNING
+TO FIX: should print message for MM_INFO
+TO FIX: should print message for MM_NOSEV
+TO FIX: should print message for MM_TEST
+GLIBC:tst-fmtmsg: TO FIX: should print message for MM_HALT
+GLIBC:tst-fmtmsg: TO FIX: should print message for MM_ERROR
+GLIBC:tst-fmtmsg: TO FIX: should print message for MM_WARNING
+GLIBC:tst-fmtmsg: TO FIX: should print message for MM_INFO
+GLIBC:tst-fmtmsg: TO FIX: should print message for MM_NOSEV
+GLIBC:tst-fmtmsg: TO FIX: should print message for MM_TEST
+HALT: TO FIX: should print message for MM_HALT
+ERROR: TO FIX: should print message for MM_ERROR
+WARNING: TO FIX: should print message for MM_WARNING
+INFO: TO FIX: should print message for MM_INFO
+TO FIX: should print message for MM_NOSEV
+TEST: TO FIX: should print message for MM_TEST
+GLIBC:tst-fmtmsg: HALT: TO FIX: should print message for MM_HALT
+GLIBC:tst-fmtmsg: ERROR: TO FIX: should print message for MM_ERROR
+GLIBC:tst-fmtmsg: WARNING: TO FIX: should print message for MM_WARNING
+GLIBC:tst-fmtmsg: INFO: TO FIX: should print message for MM_INFO
+GLIBC:tst-fmtmsg: TO FIX: should print message for MM_NOSEV
+GLIBC:tst-fmtmsg: TEST: TO FIX: should print message for MM_TEST
+halt
+TO FIX: should print message for MM_HALT
+halt
+TO FIX: should print message for MM_ERROR
+halt
+TO FIX: should print message for MM_WARNING
+halt
+TO FIX: should print message for MM_INFO
+halt
+TO FIX: should print message for MM_NOSEV
+halt
+TO FIX: should print message for MM_TEST
+GLIBC:tst-fmtmsg: halt
+TO FIX: should print message for MM_HALT
+GLIBC:tst-fmtmsg: halt
+TO FIX: should print message for MM_ERROR
+GLIBC:tst-fmtmsg: halt
+TO FIX: should print message for MM_WARNING
+GLIBC:tst-fmtmsg: halt
+TO FIX: should print message for MM_INFO
+GLIBC:tst-fmtmsg: halt
+TO FIX: should print message for MM_NOSEV
+GLIBC:tst-fmtmsg: halt
+TO FIX: should print message for MM_TEST
+HALT: halt
+TO FIX: should print message for MM_HALT
+ERROR: halt
+TO FIX: should print message for MM_ERROR
+WARNING: halt
+TO FIX: should print message for MM_WARNING
+INFO: halt
+TO FIX: should print message for MM_INFO
+halt
+TO FIX: should print message for MM_NOSEV
+TEST: halt
+TO FIX: should print message for MM_TEST
+GLIBC:tst-fmtmsg: HALT: halt
+TO FIX: should print message for MM_HALT
+GLIBC:tst-fmtmsg: ERROR: halt
+TO FIX: should print message for MM_ERROR
+GLIBC:tst-fmtmsg: WARNING: halt
+TO FIX: should print message for MM_WARNING
+GLIBC:tst-fmtmsg: INFO: halt
+TO FIX: should print message for MM_INFO
+GLIBC:tst-fmtmsg: halt
+TO FIX: should print message for MM_NOSEV
+GLIBC:tst-fmtmsg: TEST: halt
+TO FIX: should print message for MM_TEST
+GLIBC:tst-fmtmsg:1
+GLIBC:tst-fmtmsg:2
+GLIBC:tst-fmtmsg:3
+GLIBC:tst-fmtmsg:4
+GLIBC:tst-fmtmsg:5
+GLIBC:tst-fmtmsg:6
+GLIBC:tst-fmtmsg: GLIBC:tst-fmtmsg:1
+GLIBC:tst-fmtmsg: GLIBC:tst-fmtmsg:2
+GLIBC:tst-fmtmsg: GLIBC:tst-fmtmsg:3
+GLIBC:tst-fmtmsg: GLIBC:tst-fmtmsg:4
+GLIBC:tst-fmtmsg: GLIBC:tst-fmtmsg:5
+GLIBC:tst-fmtmsg: GLIBC:tst-fmtmsg:6
+HALT: GLIBC:tst-fmtmsg:1
+ERROR: GLIBC:tst-fmtmsg:2
+WARNING: GLIBC:tst-fmtmsg:3
+INFO: GLIBC:tst-fmtmsg:4
+GLIBC:tst-fmtmsg:5
+TEST: GLIBC:tst-fmtmsg:6
+GLIBC:tst-fmtmsg: HALT: GLIBC:tst-fmtmsg:1
+GLIBC:tst-fmtmsg: ERROR: GLIBC:tst-fmtmsg:2
+GLIBC:tst-fmtmsg: WARNING: GLIBC:tst-fmtmsg:3
+GLIBC:tst-fmtmsg: INFO: GLIBC:tst-fmtmsg:4
+GLIBC:tst-fmtmsg: GLIBC:tst-fmtmsg:5
+GLIBC:tst-fmtmsg: TEST: GLIBC:tst-fmtmsg:6
+halt
+GLIBC:tst-fmtmsg:1
+halt
+GLIBC:tst-fmtmsg:2
+halt
+GLIBC:tst-fmtmsg:3
+halt
+GLIBC:tst-fmtmsg:4
+halt
+GLIBC:tst-fmtmsg:5
+halt
+GLIBC:tst-fmtmsg:6
+GLIBC:tst-fmtmsg: halt
+GLIBC:tst-fmtmsg:1
+GLIBC:tst-fmtmsg: halt
+GLIBC:tst-fmtmsg:2
+GLIBC:tst-fmtmsg: halt
+GLIBC:tst-fmtmsg:3
+GLIBC:tst-fmtmsg: halt
+GLIBC:tst-fmtmsg:4
+GLIBC:tst-fmtmsg: halt
+GLIBC:tst-fmtmsg:5
+GLIBC:tst-fmtmsg: halt
+GLIBC:tst-fmtmsg:6
+HALT: halt
+GLIBC:tst-fmtmsg:1
+ERROR: halt
+GLIBC:tst-fmtmsg:2
+WARNING: halt
+GLIBC:tst-fmtmsg:3
+INFO: halt
+GLIBC:tst-fmtmsg:4
+halt
+GLIBC:tst-fmtmsg:5
+TEST: halt
+GLIBC:tst-fmtmsg:6
+GLIBC:tst-fmtmsg: HALT: halt
+GLIBC:tst-fmtmsg:1
+GLIBC:tst-fmtmsg: ERROR: halt
+GLIBC:tst-fmtmsg:2
+GLIBC:tst-fmtmsg: WARNING: halt
+GLIBC:tst-fmtmsg:3
+GLIBC:tst-fmtmsg: INFO: halt
+GLIBC:tst-fmtmsg:4
+GLIBC:tst-fmtmsg: halt
+GLIBC:tst-fmtmsg:5
+GLIBC:tst-fmtmsg: TEST: halt
+GLIBC:tst-fmtmsg:6
+TO FIX: should print message for MM_HALT  GLIBC:tst-fmtmsg:1
+TO FIX: should print message for MM_ERROR  GLIBC:tst-fmtmsg:2
+TO FIX: should print message for MM_WARNING  GLIBC:tst-fmtmsg:3
+TO FIX: should print message for MM_INFO  GLIBC:tst-fmtmsg:4
+TO FIX: should print message for MM_NOSEV  GLIBC:tst-fmtmsg:5
+TO FIX: should print message for MM_TEST  GLIBC:tst-fmtmsg:6
+GLIBC:tst-fmtmsg: TO FIX: should print message for MM_HALT  GLIBC:tst-fmtmsg:1
+GLIBC:tst-fmtmsg: TO FIX: should print message for MM_ERROR  GLIBC:tst-fmtmsg:2
+GLIBC:tst-fmtmsg: TO FIX: should print message for MM_WARNING  GLIBC:tst-fmtmsg:3
+GLIBC:tst-fmtmsg: TO FIX: should print message for MM_INFO  GLIBC:tst-fmtmsg:4
+GLIBC:tst-fmtmsg: TO FIX: should print message for MM_NOSEV  GLIBC:tst-fmtmsg:5
+GLIBC:tst-fmtmsg: TO FIX: should print message for MM_TEST  GLIBC:tst-fmtmsg:6
+HALT: TO FIX: should print message for MM_HALT  GLIBC:tst-fmtmsg:1
+ERROR: TO FIX: should print message for MM_ERROR  GLIBC:tst-fmtmsg:2
+WARNING: TO FIX: should print message for MM_WARNING  GLIBC:tst-fmtmsg:3
+INFO: TO FIX: should print message for MM_INFO  GLIBC:tst-fmtmsg:4
+TO FIX: should print message for MM_NOSEV  GLIBC:tst-fmtmsg:5
+TEST: TO FIX: should print message for MM_TEST  GLIBC:tst-fmtmsg:6
+GLIBC:tst-fmtmsg: HALT: TO FIX: should print message for MM_HALT  GLIBC:tst-fmtmsg:1
+GLIBC:tst-fmtmsg: ERROR: TO FIX: should print message for MM_ERROR  GLIBC:tst-fmtmsg:2
+GLIBC:tst-fmtmsg: WARNING: TO FIX: should print message for MM_WARNING  GLIBC:tst-fmtmsg:3
+GLIBC:tst-fmtmsg: INFO: TO FIX: should print message for MM_INFO  GLIBC:tst-fmtmsg:4
+GLIBC:tst-fmtmsg: TO FIX: should print message for MM_NOSEV  GLIBC:tst-fmtmsg:5
+GLIBC:tst-fmtmsg: TEST: TO FIX: should print message for MM_TEST  GLIBC:tst-fmtmsg:6
+halt
+TO FIX: should print message for MM_HALT  GLIBC:tst-fmtmsg:1
+halt
+TO FIX: should print message for MM_ERROR  GLIBC:tst-fmtmsg:2
+halt
+TO FIX: should print message for MM_WARNING  GLIBC:tst-fmtmsg:3
+halt
+TO FIX: should print message for MM_INFO  GLIBC:tst-fmtmsg:4
+halt
+TO FIX: should print message for MM_NOSEV  GLIBC:tst-fmtmsg:5
+halt
+TO FIX: should print message for MM_TEST  GLIBC:tst-fmtmsg:6
+GLIBC:tst-fmtmsg: halt
+TO FIX: should print message for MM_HALT  GLIBC:tst-fmtmsg:1
+GLIBC:tst-fmtmsg: halt
+TO FIX: should print message for MM_ERROR  GLIBC:tst-fmtmsg:2
+GLIBC:tst-fmtmsg: halt
+TO FIX: should print message for MM_WARNING  GLIBC:tst-fmtmsg:3
+GLIBC:tst-fmtmsg: halt
+TO FIX: should print message for MM_INFO  GLIBC:tst-fmtmsg:4
+GLIBC:tst-fmtmsg: halt
+TO FIX: should print message for MM_NOSEV  GLIBC:tst-fmtmsg:5
+GLIBC:tst-fmtmsg: halt
+TO FIX: should print message for MM_TEST  GLIBC:tst-fmtmsg:6
+HALT: halt
+TO FIX: should print message for MM_HALT  GLIBC:tst-fmtmsg:1
+ERROR: halt
+TO FIX: should print message for MM_ERROR  GLIBC:tst-fmtmsg:2
+WARNING: halt
+TO FIX: should print message for MM_WARNING  GLIBC:tst-fmtmsg:3
+INFO: halt
+TO FIX: should print message for MM_INFO  GLIBC:tst-fmtmsg:4
+halt
+TO FIX: should print message for MM_NOSEV  GLIBC:tst-fmtmsg:5
+TEST: halt
+TO FIX: should print message for MM_TEST  GLIBC:tst-fmtmsg:6
+GLIBC:tst-fmtmsg: HALT: halt
+TO FIX: should print message for MM_HALT  GLIBC:tst-fmtmsg:1
+GLIBC:tst-fmtmsg: ERROR: halt
+TO FIX: should print message for MM_ERROR  GLIBC:tst-fmtmsg:2
+GLIBC:tst-fmtmsg: WARNING: halt
+TO FIX: should print message for MM_WARNING  GLIBC:tst-fmtmsg:3
+GLIBC:tst-fmtmsg: INFO: halt
+TO FIX: should print message for MM_INFO  GLIBC:tst-fmtmsg:4
+GLIBC:tst-fmtmsg: halt
+TO FIX: should print message for MM_NOSEV  GLIBC:tst-fmtmsg:5
+GLIBC:tst-fmtmsg: TEST: halt
+TO FIX: should print message for MM_TEST  GLIBC:tst-fmtmsg:6
+EOF
+exit $?
diff --git a/REORG.TODO/stdlib/tst-getrandom.c b/REORG.TODO/stdlib/tst-getrandom.c
new file mode 100644
index 0000000000..e84a83f248
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-getrandom.c
@@ -0,0 +1,245 @@
+/* Tests for the getentropy, getrandom functions.
+   Copyright (C) 2016-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <errno.h>
+#include <stdbool.h>
+#include <stdio.h>
+#include <string.h>
+#include <sys/random.h>
+
+/* Set to true if any errors are encountered.  */
+static bool errors;
+
+/* Test getrandom with a single buffer length.  NB: The passed-in
+   buffer must have room for four extra bytes after the specified
+   length, which are used to test that getrandom leaves those bytes
+   unchanged.  */
+static void
+test_length (char *buffer, size_t length, unsigned int flags)
+{
+  memset (buffer, 0, length);
+  strcpy (buffer + length, "123");
+  ssize_t ret = getrandom (buffer, length, flags);
+  if (ret < 0)
+    {
+      /* EAGAIN is an expected error with GRND_RANDOM and
+         GRND_NONBLOCK.  */
+      if ((flags & GRND_RANDOM)
+          && (flags & GRND_NONBLOCK)
+          && errno == EAGAIN)
+        return;
+      printf ("error: getrandom (%zu, 0x%x): %m\n", length, flags);
+      errors = true;
+      return;
+    }
+ if (ret != length)
+    {
+      if (flags & GRND_RANDOM)
+        {
+          if (ret == 0 || ret > length)
+            {
+              printf ("error: getrandom (%zu, 0x%x) returned %zd\n",
+                      length, flags, ret);
+              errors = true;
+            }
+        }
+      else
+        {
+          printf ("error: getrandom (%zu, 0x%x) returned %zd\n",
+                  length, flags, ret);
+          errors = true;
+        }
+    }
+  if (length >= 7)
+    {
+      /* One spurious test failure in 2**56 is sufficiently
+         unlikely.  */
+      int non_null = 0;
+      for (int i = 0; i < length; ++i)
+        non_null += buffer[i] != 0;
+      if (non_null == 0)
+        {
+          printf ("error: getrandom (%zu, 0x%x) returned all-zero bytes\n",
+                  length, flags);
+          errors = true;
+        }
+    }
+  if (memcmp (buffer + length, "123", 4) != 0)
+    {
+      printf ("error: getrandom (%zu, 0x%x) wrote spurious bytes\n",
+              length, flags);
+      errors = true;
+    }
+}
+
+/* Call getrandom repeatedly to fill the buffer.  */
+static bool
+getrandom_full (char *buffer, size_t length, unsigned int flags)
+{
+  char *end = buffer + length;
+  while (buffer < end)
+    {
+      ssize_t ret = getrandom (buffer, end - buffer, flags);
+      if (ret < 0)
+        {
+          printf ("error: getrandom (%zu, 0x%x): %m\n", length, flags);
+          errors = true;
+          return false;
+        }
+      buffer += ret;
+    }
+
+  return true;
+}
+
+static void
+test_flags (unsigned int flags)
+{
+  /* Test various lengths, but only for !GRND_RANDOM, to conserve
+     entropy.  */
+  {
+    enum { max_length = 300 };
+    char buffer[max_length + 4];
+    if (flags & GRND_RANDOM)
+      test_length (buffer, 0, flags);
+    else
+      {
+        for (int length = 0; length <= 9; ++length)
+          test_length (buffer, length, flags);
+        test_length (buffer, 16, flags);
+        test_length (buffer, max_length, flags);
+      }
+  }
+
+  /* Test that getrandom returns different data.  */
+  if (!(flags & GRND_NONBLOCK))
+    {
+      char buffer1[8];
+      memset (buffer1, 0, sizeof (buffer1));
+
+      char buffer2[8];
+      memset (buffer2, 0, sizeof (buffer2));
+
+      if (getrandom_full (buffer1, sizeof (buffer1), flags)
+          && getrandom_full (buffer2, sizeof (buffer2), flags))
+        {
+          /* The probability that these two 8-byte buffers are equal
+             is very small (assuming that two subsequent calls to
+             getrandom result are independent, uniformly distributed
+             random variables).  */
+          if (memcmp (buffer1, buffer2, sizeof (buffer1)) == 0)
+            {
+              printf ("error: getrandom returns constant value\n");
+              errors = true;
+            }
+        }
+    }
+}
+
+static void
+test_getentropy (void)
+{
+  char buf[16];
+  memset (buf, '@', sizeof (buf));
+  if (getentropy (buf, 0) != 0)
+    {
+      printf ("error: getentropy zero length: %m\n");
+      errors = true;
+      return;
+    }
+  for (size_t i = 0; i < sizeof (buf); ++i)
+    if (buf[i] != '@')
+      {
+        printf ("error: getentropy modified zero-length buffer\n");
+        errors = true;
+        return;
+      }
+
+  if (getentropy (buf, sizeof (buf)) != 0)
+    {
+      printf ("error: getentropy buf: %m\n");
+      errors = true;
+      return;
+    }
+
+  char buf2[256];
+  _Static_assert (sizeof (buf) < sizeof (buf2), "buf and buf2 compatible");
+  memset (buf2, '@', sizeof (buf2));
+  if (getentropy (buf2, sizeof (buf)) != 0)
+    {
+      printf ("error: getentropy buf2: %m\n");
+      errors = true;
+      return;
+    }
+
+  /* The probability that these two buffers are equal is very
+     small. */
+  if (memcmp (buf, buf2, sizeof (buf) == 0))
+    {
+      printf ("error: getentropy appears to return constant bytes\n");
+      errors = true;
+      return;
+    }
+
+  for (size_t i = sizeof (buf); i < sizeof (buf2); ++i)
+    if (buf2[i] != '@')
+      {
+        printf ("error: getentropy wrote beyond the end of the buffer\n");
+        errors = true;
+        return;
+      }
+
+  char buf3[257];
+  if (getentropy (buf3, sizeof (buf3)) == 0)
+    {
+      printf ("error: getentropy successful for 257 byte buffer\n");
+      errors = true;
+      return;
+    }
+  if (errno != EIO)
+    {
+      printf ("error: getentropy wrong error for 257 byte buffer: %m\n");
+      errors = true;
+      return;
+    }
+}
+
+static int
+do_test (void)
+{
+  /* Check if getrandom is not supported by this system.  */
+  if (getrandom (NULL, 0, 0) == -1 && errno == ENOSYS)
+    return 77;
+
+  for (int use_random = 0; use_random < 2; ++use_random)
+    for (int use_nonblock = 0; use_nonblock < 2; ++use_nonblock)
+      {
+        unsigned int flags = 0;
+        if (use_random)
+          flags |= GRND_RANDOM;
+        if (use_nonblock)
+          flags |= GRND_NONBLOCK;
+        test_flags (flags);
+      }
+
+  test_getentropy ();
+
+  return errors;
+}
+
+#include <support/test-driver.c>
diff --git a/REORG.TODO/stdlib/tst-limits.c b/REORG.TODO/stdlib/tst-limits.c
new file mode 100644
index 0000000000..9aabc360f6
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-limits.c
@@ -0,0 +1,72 @@
+/* It is important that this comes first to not hide effects introduced
+   by other headers.  */
+#include <limits.h>
+
+#include <inttypes.h>
+#include <stdio.h>
+
+
+static long long int
+bitval (int bits)
+{
+  long long int val = 0;
+  while (bits-- > 0)
+    val |= 1ll << bits;
+  return val;
+}
+
+
+static int
+do_test (void)
+{
+  int result = 0;
+
+#define TEST(name, format, expected) \
+  printf ("%-12s expected = %-20" format "  actual = %" format "\n",	      \
+	  #name ":", expected, name);					      \
+  result |= name != expected
+
+  /* The limits from ISO C99.  */
+
+  /* We cannot support anything but 8-bit chars.  */
+  TEST (CHAR_BIT, "d", 8);
+  TEST (SCHAR_MIN, "d", -128);
+  TEST (SCHAR_MAX, "d", 127);
+  TEST (UCHAR_MAX, "d", 255);
+
+  TEST (SHRT_MIN, "d", -(1 << (sizeof (short int) * CHAR_BIT - 1)));
+  TEST (SHRT_MAX, "d", (1 << (sizeof (short int) * CHAR_BIT - 1)) - 1);
+  TEST (USHRT_MAX, "d", (1 << sizeof (short int) * CHAR_BIT) - 1);
+
+  TEST (INT_MIN, "d", (int) -bitval (sizeof (int) * CHAR_BIT - 1) - 1);
+  TEST (INT_MAX, "d", (int) bitval (sizeof (int) * CHAR_BIT - 1));
+  TEST (UINT_MAX, "u",
+	(unsigned int) bitval (sizeof (unsigned int) * CHAR_BIT));
+
+  TEST (LONG_MIN, "ld",
+	(long int) -bitval (sizeof (long int) * CHAR_BIT - 1) - 1);
+  TEST (LONG_MAX, "ld", (long int) bitval (sizeof (long int) * CHAR_BIT - 1));
+  TEST (ULONG_MAX, "lu",
+	(unsigned long int) bitval (sizeof (unsigned long int) * CHAR_BIT));
+
+  TEST (LLONG_MIN, "lld", -bitval (sizeof (long long int) * CHAR_BIT - 1) - 1);
+  TEST (LLONG_MAX, "lld", bitval (sizeof (long long int) * CHAR_BIT - 1));
+  TEST (ULLONG_MAX, "llu",
+	(unsigned long long int) bitval (sizeof (unsigned long long int)
+					 * CHAR_BIT));
+
+  /* Values from POSIX and Unix.  */
+#ifdef PAGESIZE
+  TEST (PAGESIZE, "d", getpagesize ());
+#elif defined (PAGE_SIZE)
+  TEST (PAGE_SIZE, "d", getpagesize ());
+#endif
+
+  TEST (WORD_BIT, "d", (int) sizeof (int) * CHAR_BIT);
+  TEST (LONG_BIT, "d", (int) sizeof (long int) * CHAR_BIT);
+
+  return result;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-makecontext.c b/REORG.TODO/stdlib/tst-makecontext.c
new file mode 100644
index 0000000000..d7ffad5f64
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-makecontext.c
@@ -0,0 +1,110 @@
+/* Copyright (C) 2006-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <errno.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <ucontext.h>
+#include <assert.h>
+#include <unwind.h>
+#include <dlfcn.h>
+#include <gnu/lib-names.h>
+
+ucontext_t ucp;
+char st1[16384];
+__thread int thr;
+
+int somevar = -76;
+long othervar = -78L;
+
+struct trace_arg
+{
+  int cnt, size;
+};
+
+static _Unwind_Reason_Code
+backtrace_helper (struct _Unwind_Context *ctx, void *a)
+{
+  struct trace_arg *arg = a;
+  if (++arg->cnt == arg->size)
+    return _URC_END_OF_STACK;
+  return _URC_NO_REASON;
+}
+
+void
+cf (int i)
+{
+  struct trace_arg arg = { .size = 100, .cnt = -1 };
+  void *handle;
+  _Unwind_Reason_Code (*unwind_backtrace) (_Unwind_Trace_Fn, void *);
+
+  if (i != othervar || thr != 94)
+    {
+      printf ("i %d thr %d\n", i, thr);
+      exit (1);
+    }
+
+  /* Test if callback function of _Unwind_Backtrace is not called infinitely
+     times. See Bug 18508 or gcc bug "Bug 66303 - runtime.Caller() returns
+     infinitely deep stack frames on s390x.".
+     The go runtime calls backtrace_full() in
+     <gcc-src>/libbacktrace/backtrace.c, which uses _Unwind_Backtrace().  */
+  handle = dlopen (LIBGCC_S_SO, RTLD_LAZY);
+  if (handle != NULL)
+    {
+      unwind_backtrace = dlsym (handle, "_Unwind_Backtrace");
+      if (unwind_backtrace != NULL)
+	{
+	  unwind_backtrace (backtrace_helper, &arg);
+	  assert (arg.cnt != -1 && arg.cnt < 100);
+	}
+      dlclose (handle);
+    }
+
+  /* Since uc_link below has been set to NULL, setcontext is supposed to
+     terminate the process normally after this function returns.  */
+}
+
+int
+do_test (void)
+{
+  if (getcontext (&ucp) != 0)
+    {
+      if (errno == ENOSYS)
+	{
+	  puts ("context handling not supported");
+	  return 0;
+	}
+
+      puts ("getcontext failed");
+      return 1;
+    }
+  thr = 94;
+  ucp.uc_link = NULL;
+  ucp.uc_stack.ss_sp = st1;
+  ucp.uc_stack.ss_size = sizeof st1;
+  makecontext (&ucp, (void (*) (void)) cf, 1, somevar - 2);
+  if (setcontext (&ucp) != 0)
+    {
+      puts ("setcontext failed");
+      return 1;
+    }
+  return 2;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-makecontext2.c b/REORG.TODO/stdlib/tst-makecontext2.c
new file mode 100644
index 0000000000..0d078279a8
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-makecontext2.c
@@ -0,0 +1,79 @@
+/* Copyright (C) 2008-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <errno.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <ucontext.h>
+#include <tst-stack-align.h>
+
+ucontext_t ucp, ucp2;
+char st1[262144] __attribute__((aligned (16)));
+
+void
+cf (int i, int j)
+{
+  if (i != 78 || j != 274)
+    {
+      printf ("i %d j %d\n", i, j);
+      exit (1);
+    }
+  else if (TEST_STACK_ALIGN ())
+    {
+      puts ("insufficiently aligned stack");
+      exit (2);
+    }
+}
+
+int
+do_test (void)
+{
+  for (size_t j = 32; j < 64; j += sizeof (long))
+    {
+      if (getcontext (&ucp) != 0)
+	{
+	  if (errno == ENOSYS)
+	    {
+	      puts ("context handling not supported");
+	      return 0;
+	    }
+
+	  puts ("getcontext failed");
+	  return 1;
+	}
+      ucp.uc_link = &ucp2;
+      ucp.uc_stack.ss_sp = st1;
+      ucp.uc_stack.ss_size = sizeof (st1) - j;
+      memset (&st1[sizeof (st1) - j], 0x55, j);
+      makecontext (&ucp, (void (*) (void)) cf, 2, 78, 274);
+      if (swapcontext (&ucp2, &ucp) != 0)
+	{
+	  puts ("setcontext failed");
+	  return 1;
+	}
+
+      for (size_t i = j; i > 0; i--)
+	if (st1[sizeof (st1) - j + i - 1] != 0x55)
+	  { printf ("fail %zd %zd\n", i, j); break; }
+    }
+
+  return 0;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-makecontext3.c b/REORG.TODO/stdlib/tst-makecontext3.c
new file mode 100644
index 0000000000..ccdeb4a282
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-makecontext3.c
@@ -0,0 +1,220 @@
+/* Copyright (C) 2001-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <errno.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ucontext.h>
+#include <unistd.h>
+
+static ucontext_t ctx[3];
+
+static int was_in_f1;
+static int was_in_f2;
+
+static char st2[32768];
+
+static volatile int flag;
+
+static void
+f1 (int a00, int a01, int a02, int a03, int a04, int a05, int a06, int a07,
+    int a08, int a09, int a10, int a11, int a12, int a13, int a14, int a15,
+    int a16, int a17, int a18, int a19, int a20, int a21, int a22, int a23,
+    int a24, int a25, int a26, int a27, int a28, int a29, int a30, int a31,
+    int a32)
+{
+  printf ("start f1(a00=%08x,a01=%08x,a02=%08x,a03=%08x,\n"
+	  "         a04=%08x,a05=%08x,a06=%08x,a07=%08x,\n"
+	  "         a08=%08x,a09=%08x,a10=%08x,a11=%08x,\n"
+	  "         a12=%08x,a13=%08x,a14=%08x,a15=%08x,\n"
+	  "         a16=%08x,a17=%08x,a18=%08x,a19=%08x,\n"
+	  "         a20=%08x,a21=%08x,a22=%08x,a23=%08x,\n"
+	  "         a24=%08x,a25=%08x,a26=%08x,a27=%08x,\n"
+	  "         a28=%08x,a29=%08x,a30=%08x,a31=%08x,\n"
+	  "         a32=%08x) [%d]\n",
+	  a00, a01, a02, a03, a04, a05, a06, a07,
+	  a08, a09, a10, a11, a12, a13, a14, a15,
+	  a16, a17, a18, a19, a20, a21, a22, a23,
+	  a24, a25, a26, a27, a28, a29, a30, a31,
+	  a32, flag);
+
+  if (a00 != (0x00000001 << flag) || a01 != (0x00000004 << flag)
+      || a02 != (0x00000012 << flag) || a03 != (0x00000048 << flag)
+      || a04 != (0x00000123 << flag) || a05 != (0x0000048d << flag)
+      || a06 != (0x00001234 << flag) || a07 != (0x000048d1 << flag)
+      || a08 != (0x00012345 << flag) || a09 != (0x00048d15 << flag)
+      || a10 != (0x00123456 << flag) || a11 != (0x0048d159 << flag)
+      || a12 != (0x01234567 << flag) || a13 != (0x048d159e << flag)
+      || a14 != (0x12345678 << flag) || a15 != (0x48d159e2 << flag)
+      || a16 != (0x23456789 << flag) || a17 != (0x8d159e26 << flag)
+      || a18 != (0x3456789a << flag) || a19 != (0xd159e26a << flag)
+      || a20 != (0x456789ab << flag) || a21 != (0x159e26af << flag)
+      || a22 != (0x56789abc << flag) || a23 != (0x59e26af3 << flag)
+      || a24 != (0x6789abcd << flag) || a25 != (0x9e26af37 << flag)
+      || a26 != (0x789abcde << flag) || a27 != (0xe26af37b << flag)
+      || a28 != (0x89abcdef << flag) || a29 != (0x26af37bc << flag)
+      || a30 != (0x9abcdef0 << flag) || a31 != (0x6af37bc3 << flag)
+      || a32 != (0xabcdef0f << flag))
+    {
+      puts ("arg mismatch");
+      exit (-1);
+    }
+
+  if (flag && swapcontext (&ctx[1], &ctx[2]) != 0)
+    {
+      printf ("%s: swapcontext: %m\n", __FUNCTION__);
+      exit (1);
+    }
+  printf ("finish f1 [%d]\n", flag);
+  flag++;
+  was_in_f1++;
+}
+
+static void
+f2 (void)
+{
+  puts ("start f2");
+  if (swapcontext (&ctx[2], &ctx[1]) != 0)
+    {
+      printf ("%s: swapcontext: %m\n", __FUNCTION__);
+      exit (1);
+    }
+  puts ("finish f2");
+  was_in_f2 = 1;
+}
+
+volatile int global;
+
+
+static int back_in_main;
+
+
+static void
+check_called (void)
+{
+  if (back_in_main == 0)
+    {
+      puts ("program did not reach main again");
+      _exit (1);
+    }
+}
+
+
+int
+main (void)
+{
+  atexit (check_called);
+
+  char st1[32768];
+
+  puts ("making contexts");
+  if (getcontext (&ctx[0]) != 0)
+    {
+      if (errno == ENOSYS)
+	{
+	  back_in_main = 1;
+	  exit (0);
+	}
+
+      printf ("%s: getcontext: %m\n", __FUNCTION__);
+      exit (1);
+    }
+
+  if (getcontext (&ctx[1]) != 0)
+    {
+      printf ("%s: getcontext: %m\n", __FUNCTION__);
+      exit (1);
+    }
+
+  ctx[1].uc_stack.ss_sp = st1;
+  ctx[1].uc_stack.ss_size = sizeof st1;
+  ctx[1].uc_link = &ctx[0];
+  errno = 0;
+  makecontext (&ctx[1], (void (*) (void)) f1, 33,
+	       0x00000001 << flag, 0x00000004 << flag,
+	       0x00000012 << flag, 0x00000048 << flag,
+	       0x00000123 << flag, 0x0000048d << flag,
+	       0x00001234 << flag, 0x000048d1 << flag,
+	       0x00012345 << flag, 0x00048d15 << flag,
+	       0x00123456 << flag, 0x0048d159 << flag,
+	       0x01234567 << flag, 0x048d159e << flag,
+	       0x12345678 << flag, 0x48d159e2 << flag,
+	       0x23456789 << flag, 0x8d159e26 << flag,
+	       0x3456789a << flag, 0xd159e26a << flag,
+	       0x456789ab << flag, 0x159e26af << flag,
+	       0x56789abc << flag, 0x59e26af3 << flag,
+	       0x6789abcd << flag, 0x9e26af37 << flag,
+	       0x789abcde << flag, 0xe26af37b << flag,
+	       0x89abcdef << flag, 0x26af37bc << flag,
+	       0x9abcdef0 << flag, 0x6af37bc3 << flag,
+	       0xabcdef0f << flag);
+
+  /* Without this check, a stub makecontext can make us spin forever.  */
+  if (errno == ENOSYS)
+    {
+      puts ("makecontext not implemented");
+      back_in_main = 1;
+      return 0;
+    }
+
+  /* Play some tricks with this context.  */
+  if (++global == 1)
+    if (setcontext (&ctx[1]) != 0)
+      {
+	printf ("%s: setcontext: %m\n", __FUNCTION__);
+	exit (1);
+      }
+  if (global != 2)
+    {
+      printf ("%s: 'global' not incremented twice\n", __FUNCTION__);
+      exit (1);
+    }
+
+  if (getcontext (&ctx[2]) != 0)
+    {
+      printf ("%s: second getcontext: %m\n", __FUNCTION__);
+      exit (1);
+    }
+  ctx[2].uc_stack.ss_sp = st2;
+  ctx[2].uc_stack.ss_size = sizeof st2;
+  ctx[2].uc_link = &ctx[1];
+  makecontext (&ctx[2], f2, 0);
+
+  puts ("swapping contexts");
+  if (swapcontext (&ctx[0], &ctx[2]) != 0)
+    {
+      printf ("%s: swapcontext: %m\n", __FUNCTION__);
+      exit (1);
+    }
+  puts ("back at main program");
+  back_in_main = 1;
+
+  if (was_in_f1 < 2)
+    {
+      puts ("didn't reach f1 twice");
+      exit (1);
+    }
+  if (was_in_f2 == 0)
+    {
+      puts ("didn't reach f2");
+      exit (1);
+    }
+
+  puts ("test succeeded");
+  return 0;
+}
diff --git a/REORG.TODO/stdlib/tst-putenv.c b/REORG.TODO/stdlib/tst-putenv.c
new file mode 100644
index 0000000000..47513ea42b
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-putenv.c
@@ -0,0 +1,18 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+static int
+do_test (void)
+{
+  char *p = getenv ("SOMETHING_NOBODY_USES");
+  if (p == NULL)
+    {
+      puts ("envvar not defined");
+      return 1;
+    }
+
+  return 0;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-putenvmod.c b/REORG.TODO/stdlib/tst-putenvmod.c
new file mode 100644
index 0000000000..7c0c337d3f
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-putenvmod.c
@@ -0,0 +1,17 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+void
+__attribute ((constructor))
+init (void)
+{
+  puts ("init DSO");
+
+  static char str[] = "SOMETHING_NOBODY_USES=something_else";
+  if (putenv (str) != 0)
+    {
+      puts ("putenv failed");
+      _exit (1);
+    }
+}
diff --git a/REORG.TODO/stdlib/tst-qsort.c b/REORG.TODO/stdlib/tst-qsort.c
new file mode 100644
index 0000000000..2b26e74d0b
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-qsort.c
@@ -0,0 +1,55 @@
+/* Test case by Paul Eggert <eggert@twinsun.com> */
+#include <stdio.h>
+#include <stdlib.h>
+#include <tst-stack-align.h>
+
+struct big { char c[4 * 1024]; };
+
+struct big *array;
+struct big *array_end;
+
+static int align_check;
+
+int
+compare (void const *a1, void const *b1)
+{
+  struct big const *a = a1;
+  struct big const *b = b1;
+
+  if (!align_check)
+    align_check = TEST_STACK_ALIGN () ? -1 : 1;
+
+  if (! (array <= a && a < array_end
+	 && array <= b && b < array_end))
+    {
+      exit (EXIT_FAILURE);
+    }
+  return b->c[0] - a->c[0];
+}
+
+int
+main (int argc, char **argv)
+{
+  size_t i;
+  size_t array_members = argv[1] ? atoi (argv[1]) : 50;
+  array = (struct big *) malloc (array_members * sizeof *array);
+  if (array == NULL)
+    {
+      puts ("no memory");
+      exit (EXIT_FAILURE);
+    }
+
+  array_end = array + array_members;
+  for (i = 0; i < array_members; i++)
+    array[i].c[0] = i % 128;
+
+  qsort (array, array_members, sizeof *array, compare);
+
+  if (align_check == -1)
+    {
+      puts ("stack not sufficiently aligned");
+      exit (EXIT_FAILURE);
+    }
+
+  return 0;
+}
diff --git a/REORG.TODO/stdlib/tst-qsort2.c b/REORG.TODO/stdlib/tst-qsort2.c
new file mode 100644
index 0000000000..10d16852b0
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-qsort2.c
@@ -0,0 +1,89 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+char *array;
+char *array_end;
+size_t member_size;
+
+int
+compare (const void *a1, const void *b1)
+{
+  const char *a = a1;
+  const char *b = b1;
+
+  if (! (array <= a && a < array_end
+	 && array <= b && b < array_end))
+    {
+      puts ("compare arguments not inside of the array");
+      exit (EXIT_FAILURE);
+    }
+  int ret = b[0] - a[0];
+  if (ret)
+    return ret;
+  if (member_size > 1)
+    return b[1] - a[1];
+  return 0;
+}
+
+int
+test (size_t nmemb, size_t size)
+{
+  array = malloc (nmemb * size);
+  if (array == NULL)
+    {
+      printf ("%zd x %zd: no memory", nmemb, size);
+      return 1;
+    }
+
+  array_end = array + nmemb * size;
+  member_size = size;
+
+  char *p;
+  size_t i;
+  size_t bias = random ();
+  for (i = 0, p = array; i < nmemb; i++, p += size)
+    {
+      p[0] = (char) (i + bias);
+      if (size > 1)
+	p[1] = (char) ((i + bias) >> 8);
+    }
+
+  qsort (array, nmemb, size, compare);
+
+  for (i = 0, p = array; i < nmemb - 1; i++, p += size)
+    {
+      if (p[0] < p[size]
+	  || (size > 1 && p[0] == p[size] && p[1] < p[size + 1]))
+	{
+	  printf ("%zd x %zd: failure at offset %zd\n", nmemb,
+		  size, i);
+	  free (array);
+	  return 1;
+	}
+    }
+
+  free (array);
+  return 0;
+}
+
+int
+main (int argc, char **argv)
+{
+  int ret = 0;
+  if (argc >= 3)
+    ret |= test (atoi (argv[1]), atoi (argv[2]));
+  else
+    {
+      ret |= test (10000, 1);
+      ret |= test (200000, 2);
+      ret |= test (2000000, 3);
+      ret |= test (2132310, 4);
+      ret |= test (1202730, 7);
+      ret |= test (1184710, 8);
+      ret |= test (272710, 12);
+      ret |= test (14170, 32);
+      ret |= test (4170, 320);
+    }
+
+  return ret;
+}
diff --git a/REORG.TODO/stdlib/tst-quick_exit.cc b/REORG.TODO/stdlib/tst-quick_exit.cc
new file mode 100644
index 0000000000..b46fafed5c
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-quick_exit.cc
@@ -0,0 +1,47 @@
+/* Bug 20198: Do not call object destructors at exit.
+   Copyright (C) 2016-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <stdlib.h>
+
+struct A
+{
+  ~A () { abort (); }
+};
+
+thread_local A a;
+
+void
+__attribute__ ((noinline, noclone))
+optimization_barrier (A &)
+{
+}
+
+static int
+do_test ()
+{
+  optimization_barrier (a);
+  /* The C++11 standard in 18.5.12 says:
+     "Objects shall not be destroyed as a result of calling
+      quick_exit."
+     If quick_exit calls the destructors the test aborts.  */
+  quick_exit (0);
+  return 0;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-rand48-2.c b/REORG.TODO/stdlib/tst-rand48-2.c
new file mode 100644
index 0000000000..8b8fef4430
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-rand48-2.c
@@ -0,0 +1,116 @@
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <time.h>
+
+static int
+do_test (void)
+{
+  time_t t = time (NULL);
+  int i, ret = 0;
+  double d;
+  long int l;
+  struct drand48_data data;
+  unsigned short int buf[3];
+
+  srand48 ((long int) t);
+  for (i = 0; i < 50; i++)
+    if ((d = drand48 ()) < 0.0 || d >= 1.0)
+      {
+        printf ("drand48 %d %g\n", i, d);
+        ret = 1;
+      }
+
+  srand48_r ((long int) t, &data);
+  for (i = 0; i < 50; i++)
+    if (drand48_r (&data, &d) != 0 || d < 0.0 || d >= 1.0)
+      {
+        printf ("drand48_r %d %g\n", i, d);
+        ret = 1;
+      }
+
+  buf[2] = (t & 0xffff0000) >> 16; buf[1] = (t & 0xffff); buf[0] = 0x330e;
+  for (i = 0; i < 50; i++)
+    if ((d = erand48 (buf)) < 0.0 || d >= 1.0)
+      {
+        printf ("erand48 %d %g\n", i, d);
+        ret = 1;
+      }
+
+  buf[2] = (t & 0xffff0000) >> 16; buf[1] = (t & 0xffff); buf[0] = 0x330e;
+  for (i = 0; i < 50; i++)
+    if (erand48_r (buf, &data, &d) != 0 || d < 0.0 || d >= 1.0)
+      {
+        printf ("erand48_r %d %g\n", i, d);
+        ret = 1;
+      }
+
+  srand48 ((long int) t);
+  for (i = 0; i < 50; i++)
+    if ((l = lrand48 ()) < 0 || l > INT32_MAX)
+      {
+        printf ("lrand48 %d %ld\n", i, l);
+        ret = 1;
+      }
+
+  srand48_r ((long int) t, &data);
+  for (i = 0; i < 50; i++)
+    if (lrand48_r (&data, &l) != 0 || l < 0 || l > INT32_MAX)
+      {
+        printf ("lrand48_r %d %ld\n", i, l);
+        ret = 1;
+      }
+
+  buf[2] = (t & 0xffff0000) >> 16; buf[1] = (t & 0xffff); buf[0] = 0x330e;
+  for (i = 0; i < 50; i++)
+    if ((l = nrand48 (buf)) < 0 || l > INT32_MAX)
+      {
+        printf ("nrand48 %d %ld\n", i, l);
+        ret = 1;
+      }
+
+  buf[2] = (t & 0xffff0000) >> 16; buf[1] = (t & 0xffff); buf[0] = 0x330e;
+  for (i = 0; i < 50; i++)
+    if (nrand48_r (buf, &data, &l) != 0 || l < 0 || l > INT32_MAX)
+      {
+        printf ("nrand48_r %d %ld\n", i, l);
+        ret = 1;
+      }
+
+  srand48 ((long int) t);
+  for (i = 0; i < 50; i++)
+    if ((l = mrand48 ()) < INT32_MIN || l > INT32_MAX)
+      {
+        printf ("mrand48 %d %ld\n", i, l);
+        ret = 1;
+      }
+
+  srand48_r ((long int) t, &data);
+  for (i = 0; i < 50; i++)
+    if (mrand48_r (&data, &l) != 0 || l < INT32_MIN || l > INT32_MAX)
+      {
+        printf ("mrand48_r %d %ld\n", i, l);
+        ret = 1;
+      }
+
+  buf[2] = (t & 0xffff0000) >> 16; buf[1] = (t & 0xffff); buf[0] = 0x330e;
+  for (i = 0; i < 50; i++)
+    if ((l = jrand48 (buf)) < INT32_MIN || l > INT32_MAX)
+      {
+        printf ("jrand48 %d %ld\n", i, l);
+        ret = 1;
+      }
+
+  buf[2] = (t & 0xffff0000) >> 16; buf[1] = (t & 0xffff); buf[0] = 0x330e;
+  for (i = 0; i < 50; i++)
+    if (jrand48_r (buf, &data, &l) != 0 || l < INT32_MIN || l > INT32_MAX)
+      {
+        printf ("jrand48_r %d %ld\n", i, l);
+        ret = 1;
+      }
+
+  return ret;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-rand48.c b/REORG.TODO/stdlib/tst-rand48.c
new file mode 100644
index 0000000000..973c62e1eb
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-rand48.c
@@ -0,0 +1,393 @@
+#include <float.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#ifndef DECIMAL_DIG
+# define DECIMAL_DIG	21
+#endif
+
+
+static int
+do_test (void)
+{
+  unsigned short int xs[3] = { 0x0001, 0x0012, 0x0123 };
+  unsigned short int lxs[7];
+  unsigned short int *xsp;
+  int result = 0;
+  long int l;
+  double d;
+  double e;
+
+  /* Test srand48.  */
+  srand48 (0x98765432);
+  /* Get the values of the internal Xi array.  */
+  xsp = seed48 (xs);
+  if (xsp[0] != 0x330e || xsp[1] != 0x5432 || xsp[2] != 0x9876)
+    {
+      puts ("srand48(0x98765432) didn't set correct value");
+      printf ("  expected: { %04hx, %04hx, %04hx }\n", 0x330e, 0x5432, 0x9876);
+      printf ("  seen:     { %04hx, %04hx, %04hx }\n", xsp[0], xsp[1], xsp[2]);
+      result = 1;
+    }
+  /* Put the values back.  */
+  memcpy (xs, xsp, sizeof (xs));
+  (void) seed48 (xs);
+
+  /* See whether the correct values are installed.  */
+  l = lrand48 ();
+  if (l != 0x2fed1413l)
+    {
+      printf ("lrand48() in line %d failed: expected %lx, seen %lx\n",
+	      __LINE__ - 4, 0x2fed1413l, l);
+      result = 1;
+    }
+
+  l = mrand48 ();
+  if (l != -0x5d73effdl)
+    {
+      printf ("mrand48() in line %d failed: expected %lx, seen %lx\n",
+	      __LINE__ - 4, -0x5d73effdl, l);
+      result = 1;
+    }
+
+  l = lrand48 ();
+  if (l != 0x585fcfb7l)
+    {
+      printf ("lrand48() in line %d failed: expected %lx, seen %lx\n",
+	      __LINE__ - 4, 0x585fcfb7l, l);
+      result = 1;
+    }
+
+  l = mrand48 ();
+  if (l != -0x61770b8cl)
+    {
+      printf ("mrand48() in line %d failed: expected %lx, seen %lx\n",
+	      __LINE__ - 4, -0x61770b8cl, l);
+      result = 1;
+    }
+
+  /* Test seed48.  The previous call should have install the values in
+     the initialization of `xs' above.  */
+  xs[0] = 0x1234;
+  xs[1] = 0x5678;
+  xs[2] = 0x9012;
+  xsp = seed48 (xs);
+  if (xsp[0] != 0x62f2 || xsp[1] != 0xf474 || xsp[2] != 0x9e88)
+    {
+      puts ("seed48() did not install the values correctly");
+      printf ("  expected: { %04hx, %04hx, %04hx }\n", 0x62f2, 0xf474, 0x9e88);
+      printf ("  seen:     { %04hx, %04hx, %04hx }\n", xsp[0], xsp[1], xsp[2]);
+      result = 1;
+    }
+
+  /* Test lrand48 and mrand48.  We continue from the seed established
+     above.  */
+  l = lrand48 ();
+  if (l != 0x017e48b5l)
+    {
+      printf ("lrand48() in line %d failed: expected %lx, seen %lx\n",
+	      __LINE__ - 4, 0x017e48b5l, l);
+      result = 1;
+    }
+
+  l = mrand48 ();
+  if (l != -0x1485e05dl)
+    {
+      printf ("mrand48() in line %d failed: expected %lx, seen %lx\n",
+	      __LINE__ - 4, -0x1485e05dl, l);
+      result = 1;
+    }
+
+  l = lrand48 ();
+  if (l != 0x6b6a3f95l)
+    {
+      printf ("lrand48() in line %d failed: expected %lx, seen %lx\n",
+	      __LINE__ - 4, 0x6b6a3f95l, l);
+      result = 1;
+    }
+
+  l = mrand48 ();
+  if (l != 0x175c0d6fl)
+    {
+      printf ("mrand48() in line %d failed: expected %lx, seen %lx\n",
+	      __LINE__ - 4, 0x175c0d6fl, l);
+      result = 1;
+    }
+
+  /* Test lcong48.  */
+  lxs[0] = 0x4567;
+  lxs[1] = 0x6789;
+  lxs[2] = 0x8901;
+  lxs[3] = 0x0123;
+  lxs[4] = 0x2345;
+  lxs[5] = 0x1111;
+  lxs[6] = 0x2222;
+  lcong48 (lxs);
+
+  /* See whether the correct values are installed.  */
+  l = lrand48 ();
+  if (l != 0x6df63d66l)
+    {
+      printf ("lrand48() in line %d failed: expected %lx, seen %lx\n",
+	      __LINE__ - 4, 0x6df63d66l, l);
+      result = 1;
+    }
+
+  l = mrand48 ();
+  if (l != 0x2f92c8e1l)
+    {
+      printf ("mrand48() in line %d failed: expected %lx, seen %lx\n",
+	      __LINE__ - 4, 0x2f92c8e1l, l);
+      result = 1;
+    }
+
+  l = lrand48 ();
+  if (l != 0x3b4869ffl)
+    {
+      printf ("lrand48() in line %d failed: expected %lx, seen %lx\n",
+	      __LINE__ - 4, 0x3b4869ffl, l);
+      result = 1;
+    }
+
+  l = mrand48 ();
+  if (l != 0x5cd4cc3el)
+    {
+      printf ("mrand48() in line %d failed: expected %lx, seen %lx\n",
+	      __LINE__ - 4, 0x5cd4cc3el, l);
+      result = 1;
+    }
+
+  /* Check whether srand48() restores the A and C parameters.  */
+  srand48 (0x98765432);
+
+  /* See whether the correct values are installed.  */
+  l = lrand48 ();
+  if (l != 0x2fed1413l)
+    {
+      printf ("lrand48() in line %d failed: expected %lx, seen %lx\n",
+	      __LINE__ - 4, 0x2fed1413l, l);
+      result = 1;
+    }
+
+  l = mrand48 ();
+  if (l != -0x5d73effdl)
+    {
+      printf ("mrand48() in line %d failed: expected %lx, seen %lx\n",
+	      __LINE__ - 4, -0x5d73effdl, l);
+      result = 1;
+    }
+
+  l = lrand48 ();
+  if (l != 0x585fcfb7l)
+    {
+      printf ("lrand48() in line %d failed: expected %lx, seen %lx\n",
+	      __LINE__ - 4, 0x585fcfb7l, l);
+      result = 1;
+    }
+
+  l = mrand48 ();
+  if (l != -0x61770b8cl)
+    {
+      printf ("mrand48() in line %d failed: expected %lx, seen %lx\n",
+	      __LINE__ - 4, -0x61770b8cl, l);
+      result = 1;
+    }
+
+  /* And again to see whether seed48() does the same.  */
+  lcong48 (lxs);
+
+  /* See whether lxs wasn't modified.  */
+  l = lrand48 ();
+  if (l != 0x6df63d66l)
+    {
+      printf ("lrand48() in line %d failed: expected %lx, seen %lx\n",
+	      __LINE__ - 4, 0x6df63d66l, l);
+      result = 1;
+    }
+
+  /* Test seed48.  The previous call should have install the values in
+     the initialization of `xs' above.  */
+  xs[0] = 0x1234;
+  xs[1] = 0x5678;
+  xs[2] = 0x9012;
+  xsp = seed48 (xs);
+  if (xsp[0] != 0x0637 || xsp[1] != 0x7acd || xsp[2] != 0xdbec)
+    {
+      puts ("seed48() did not install the values correctly");
+      printf ("  expected: { %04hx, %04hx, %04hx }\n", 0x0637, 0x7acd, 0xdbec);
+      printf ("  seen:     { %04hx, %04hx, %04hx }\n", xsp[0], xsp[1], xsp[2]);
+      result = 1;
+    }
+
+  /* Test lrand48 and mrand48.  We continue from the seed established
+     above.  */
+  l = lrand48 ();
+  if (l != 0x017e48b5l)
+    {
+      printf ("lrand48() in line %d failed: expected %lx, seen %lx\n",
+	      __LINE__ - 4, 0x017e48b5l, l);
+      result = 1;
+    }
+
+  l = mrand48 ();
+  if (l != -0x1485e05dl)
+    {
+      printf ("mrand48() in line %d failed: expected %lx, seen %lx\n",
+	      __LINE__ - 4, -0x1485e05dl, l);
+      result = 1;
+    }
+
+  l = lrand48 ();
+  if (l != 0x6b6a3f95l)
+    {
+      printf ("lrand48() in line %d failed: expected %lx, seen %lx\n",
+	      __LINE__ - 4, 0x6b6a3f95l, l);
+      result = 1;
+    }
+
+  l = mrand48 ();
+  if (l != 0x175c0d6fl)
+    {
+      printf ("mrand48() in line %d failed: expected %lx, seen %lx\n",
+	      __LINE__ - 4, 0x175c0d6fl, l);
+      result = 1;
+    }
+
+  /* Test drand48.  */
+  d = drand48 ();
+  if (d != 0.0908832261858485424)
+    {
+      printf ("drand48() in line %d failed: expected %.*g, seen %.*g\n",
+	      __LINE__ - 4, DECIMAL_DIG, 0.0908832261858485424,
+	      DECIMAL_DIG, d);
+      result = 1;
+    }
+
+  d = drand48 ();
+  if (d != 0.943149381730059133133)
+    {
+      printf ("drand48() in line %d failed: expected %.*g, seen %.*g\n",
+	      __LINE__ - 4, DECIMAL_DIG, 0.943149381730059133133,
+	      DECIMAL_DIG, d);
+      result = 1;
+    }
+
+  /* Now the functions which get the Xis passed.  */
+  xs[0] = 0x3849;
+  xs[1] = 0x5061;
+  xs[2] = 0x7283;
+
+  l = nrand48 (xs);
+  if (l != 0x1efe61a1l)
+    {
+      printf ("nrand48() in line %d failed: expected %lx, seen %lx\n",
+	      __LINE__ - 4, 0x1efe61a1l, l);
+      result = 1;
+    }
+
+  l = jrand48 (xs);
+  if (l != -0xa973860l)
+    {
+      printf ("jrand48() in line %d failed: expected %lx, seen %lx\n",
+	      __LINE__ - 4, -0xa973860l, l);
+      result = 1;
+    }
+
+  l = nrand48 (xs);
+  if (l != 0x2a5e57fel)
+    {
+      printf ("nrand48() in line %d failed: expected %lx, seen %lx\n",
+	      __LINE__ - 4, 0x2a5e57fel, l);
+      result = 1;
+    }
+
+  l = jrand48 (xs);
+  if (l != 0x71a779a8l)
+    {
+      printf ("jrand48() in line %d failed: expected %lx, seen %lx\n",
+	      __LINE__ - 4, 0x71a779a8l, l);
+      result = 1;
+    }
+
+  /* Test whether the global A and C are used.  */
+  lcong48 (lxs);
+
+  l = nrand48 (xs);
+  if (l != 0x32beee9fl)
+    {
+      printf ("nrand48() in line %d failed: expected %lx, seen %lx\n",
+	      __LINE__ - 4, 0x32beee9fl, l);
+      result = 1;
+    }
+
+  l = jrand48 (xs);
+  if (l != 0x7bddf3bal)
+    {
+      printf ("jrand48() in line %d failed: expected %lx, seen %lx\n",
+	      __LINE__ - 4, 0x7bddf3bal, l);
+      result = 1;
+    }
+
+  l = nrand48 (xs);
+  if (l != 0x85bdf28l)
+    {
+      printf ("nrand48() in line %d failed: expected %lx, seen %lx\n",
+	      __LINE__ - 4, 0x85bdf28l, l);
+      result = 1;
+    }
+
+  l = jrand48 (xs);
+  if (l != 0x7b433e47l)
+    {
+      printf ("jrand48() in line %d failed: expected %lx, seen %lx\n",
+	      __LINE__ - 4, 0x7b433e47l, l);
+      result = 1;
+    }
+
+  /* Test erand48.  Also compare with the drand48 results.  */
+  (void) seed48 (xs);
+
+  d = drand48 ();
+  e = erand48 (xs);
+  if (d != e)
+    {
+      printf ("\
+drand48() and erand48 in lines %d and %d produce different results\n",
+	      __LINE__ - 6, __LINE__ - 5);
+      printf ("  drand48() = %g, erand48() = %g\n", d, e);
+      result = 1;
+    }
+  else if (e != 0.640650904452755298735)
+    {
+      printf ("erand48() in line %d failed: expected %.*g, seen %.*g\n",
+	      __LINE__ - 4, DECIMAL_DIG, 0.640650904452755298735,
+	      DECIMAL_DIG, e);
+      result = 1;
+
+    }
+
+  d = drand48 ();
+  e = erand48 (xs);
+  if (d != e)
+    {
+      printf ("\
+drand48() and erand48 in lines %d and %d produce different results\n",
+	      __LINE__ - 6, __LINE__ - 5);
+      printf ("  drand48() = %g, erand48() = %g\n", d, e);
+      result = 1;
+    }
+  else if (e != 0.115372323508150742555)
+    {
+      printf ("erand48() in line %d failed: expected %.*g, seen %.*g\n",
+	      __LINE__ - 4, DECIMAL_DIG, 0.0115372323508150742555,
+	      DECIMAL_DIG, e);
+      result = 1;
+
+    }
+
+  return result;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-random.c b/REORG.TODO/stdlib/tst-random.c
new file mode 100644
index 0000000000..8fe0993dd7
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-random.c
@@ -0,0 +1,122 @@
+/* Test program for random(), srandom(), initstate(), setstate()
+   Written by Michael J. Fischer, August 21, 2000
+   Placed in the public domain.  */
+
+/* This program primarily tests the correct functioning of srandom()
+   and setstate().  The strategy is generate and store a set of random
+   sequences, each with a specified starting seed.  Then each sequence
+   is regenerated twice and checked against the stored values.
+
+   First they are regenerated one sequence at a time, using srandom()
+   to set the initial state.  A discrepency here would suggest that
+   srandom() was failing to completely initialize the random number
+   generator.
+
+   Second the sequences are regenerated in an interleaved order.
+   A state vector is created for each sequence using initstate().
+   setstate() is used to switch from sequence to sequence during
+   the interleaved generation.  A discrepency here would suggest
+   a problem with either initstate() failing to initialize the
+   random number generator properly, or the failure of setstate()
+   to correctly save and restore state information.  Also, each
+   time setstate() is called, the returned value is checked for
+   correctness (since we know what it should be).
+
+   Note:  We use default state vector for sequence 0 and our own
+   state vectors for the remaining sequences.  This is to give a check
+   that the value returned by initstate() is valid and can indeed be
+   used in the future.  */
+
+/* Strategy:
+   1.  Use srandom() followed by calls on random to generate a set of
+       sequences of values.
+   2.  Regenerate and check the sequences.
+   3.  Use initstate() to create new states.
+   4.  Regenerate the sequences in an interleaved manner and check.
+*/
+
+#include <stdlib.h>
+#include <stdio.h>
+
+const int degree = 128;		/* random number generator degree (should
+				   be one of 8, 16, 32, 64, 128, 256) */
+const int nseq = 3;		/* number of test sequences */
+const int nrnd = 50;		/* length of each test sequence */
+const unsigned int seed[3] = { 0x12344321U, 0xEE11DD22U, 0xFEDCBA98 };
+
+void fail (const char *msg, int s, int i) __attribute__ ((__noreturn__));
+
+static int
+do_test (void)
+{
+  long int rnd[nseq][nrnd];	/* pseudorandom numbers */
+  char* state[nseq];		/* state for PRNG */
+  char* oldstate[nseq];		/* old PRNG state */
+  int s;			/* sequence index */
+  int i;			/* element index */
+
+  printf ("Begining random package test using %d sequences of length %d.\n",
+	  nseq, nrnd);
+
+  /* 1. Generate and store the sequences.  */
+  printf ("Generating random sequences.\n");
+  for (s = 0; s < nseq; ++s)
+    {
+      srandom ( seed[s] );
+      for (i = 0; i < nrnd; ++i)
+	rnd[s][i] = random ();
+    }
+
+  /* 2. Regenerate and check.  */
+  printf ("Regenerating and checking sequences.\n");
+  for (s = 0; s < nseq; ++s)
+    {
+      srandom (seed[s]);
+      for (i = 0; i < nrnd; ++i)
+	if (rnd[s][i] != random ())
+	  fail ("first regenerate test", s, i);
+    }
+
+  /* 3. Create state vector, one for each sequence.
+	First state is random's internal state; others are malloced.  */
+  printf ("Creating and checking state vector for each sequence.\n");
+  srandom (seed[0]);			/* reseed with first seed */
+  for (s = 1; s < nseq; ++s)
+    {
+      state[s] = (char*) malloc (degree);
+      oldstate[s] = initstate (seed[s], state[s], degree);
+    }
+  state[0] = oldstate[1];
+
+  /* Check returned values.  */
+  for (s = 1; s < nseq - 1; ++s)
+    if (state[s] != oldstate[s + 1])
+      fail ("bad initstate() return value", s, i);
+
+  /* 4. Regenerate sequences interleaved and check.  */
+  printf ("Regenerating and checking sequences in interleaved order.\n");
+  for (i = 0; i < nrnd; ++i)
+    {
+      for (s = 0; s < nseq; ++s)
+	{
+	  char *oldstate = (char *) setstate (state[s]);
+	  if (oldstate != state[(s + nseq - 1) % nseq])
+	    fail ("bad setstate() return value", s, i);
+	  if (rnd[s][i] != random ())
+	    fail ("bad value generated in interleave test", s, i);
+	}
+    }
+  printf ("All tests passed!\n");
+  return 0;
+}
+
+void
+fail (const char *msg, int s, int i)
+{
+  printf ("\nTest FAILED: ");
+  printf ("%s (seq %d, pos %d).\n", msg, s, i);
+  exit (1);
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-random2.c b/REORG.TODO/stdlib/tst-random2.c
new file mode 100644
index 0000000000..093e16879c
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-random2.c
@@ -0,0 +1,61 @@
+/* Test initstate saving the old state.
+   Copyright (C) 2005-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Jakub Jelinek <jakub@redhat.com>, 2005.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+static int
+do_test (void)
+{
+  int pass;
+  int ret = 0;
+  long int r[2];
+
+  for (pass = 0; pass < 2; pass++)
+    {
+      srandom (0x12344321);
+
+      int j;
+      for (j = 0; j < 3; ++j)
+	random ();
+      if (pass == 1)
+	{
+	  char state[128];
+	  char *ostate = initstate (0x34562101, state, 128);
+	  if (setstate (ostate) != state)
+	    {
+	      puts ("setstate (ostate) != state");
+	      ret = 1;
+	    }
+	}
+
+      random ();
+      r[pass] = random ();
+    }
+
+  if (r[0] != r[1])
+    {
+      printf ("%ld != %ld\n", r[0], r[1]);
+      ret = 1;
+    }
+  return ret;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-secure-getenv.c b/REORG.TODO/stdlib/tst-secure-getenv.c
new file mode 100644
index 0000000000..2705cf9c5b
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-secure-getenv.c
@@ -0,0 +1,242 @@
+/* Copyright (C) 2012-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* Test that secure_getenv works by invoking the test as a SGID
+   program with a group ID from the supplementary group list.  This
+   test can fail spuriously if the user is not a member of a suitable
+   supplementary group.  */
+
+#include <errno.h>
+#include <fcntl.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <string.h>
+#include <sys/stat.h>
+#include <sys/wait.h>
+#include <unistd.h>
+
+#include <support/support.h>
+#include <support/test-driver.h>
+
+static char MAGIC_ARGUMENT[] = "run-actual-test";
+#define MAGIC_STATUS 19
+
+/* Return a GID which is not our current GID, but is present in the
+   supplementary group list.  */
+static gid_t
+choose_gid (void)
+{
+  const int count = 64;
+  gid_t groups[count];
+  int ret = getgroups (count, groups);
+  if (ret < 0)
+    {
+      printf ("getgroups: %m\n");
+      exit (1);
+    }
+  gid_t current = getgid ();
+  for (int i = 0; i < ret; ++i)
+    {
+      if (groups[i] != current)
+	return groups[i];
+    }
+  return 0;
+}
+
+
+/* Copies the executable into a restricted directory, so that we can
+   safely make it SGID with the TARGET group ID.  Then runs the
+   executable.  */
+static int
+run_executable_sgid (gid_t target)
+{
+  char *dirname = xasprintf ("%s/secure-getenv.%jd",
+			     test_dir, (intmax_t) getpid ());
+  char *execname = xasprintf ("%s/bin", dirname);
+  int infd = -1;
+  int outfd = -1;
+  int ret = -1;
+  if (mkdir (dirname, 0700) < 0)
+    {
+      printf ("mkdir: %m\n");
+      goto err;
+    }
+  infd = open ("/proc/self/exe", O_RDONLY);
+  if (infd < 0)
+    {
+      printf ("open (/proc/self/exe): %m\n");
+      goto err;
+    }
+  outfd = open (execname, O_WRONLY | O_CREAT | O_EXCL, 0700);
+  if (outfd < 0)
+    {
+      printf ("open (%s): %m\n", execname);
+      goto err;
+    }
+  char buf[4096];
+  for (;;)
+    {
+      ssize_t rdcount = read (infd, buf, sizeof (buf));
+      if (rdcount < 0)
+	{
+	  printf ("read: %m\n");
+	  goto err;
+	}
+      if (rdcount == 0)
+	break;
+      char *p = buf;
+      char *end = buf + rdcount;
+      while (p != end)
+	{
+	  ssize_t wrcount = write (outfd, buf, end - p);
+	  if (wrcount == 0)
+	    errno = ENOSPC;
+	  if (wrcount <= 0)
+	    {
+	      printf ("write: %m\n");
+	      goto err;
+	    }
+	  p += wrcount;
+	}
+    }
+  if (fchown (outfd, getuid (), target) < 0)
+    {
+      printf ("fchown (%s): %m\n", execname);
+      goto err;
+    }
+  if (fchmod (outfd, 02750) < 0)
+    {
+      printf ("fchmod (%s): %m\n", execname);
+      goto err;
+    }
+  if (close (outfd) < 0)
+    {
+      printf ("close (outfd): %m\n");
+      goto err;
+    }
+  if (close (infd) < 0)
+    {
+      printf ("close (infd): %m\n");
+      goto err;
+    }
+
+  int kid = fork ();
+  if (kid < 0)
+    {
+      printf ("fork: %m\n");
+      goto err;
+    }
+  if (kid == 0)
+    {
+      /* Child process.  */
+      char *args[] = { execname, MAGIC_ARGUMENT, NULL };
+      execve (execname, args, environ);
+      printf ("execve (%s): %m\n", execname);
+      _exit (1);
+    }
+  int status;
+  if (waitpid (kid, &status, 0) < 0)
+    {
+      printf ("waitpid: %m\n");
+      goto err;
+    }
+  if (!WIFEXITED (status) || WEXITSTATUS (status) != MAGIC_STATUS)
+    {
+      printf ("Unexpected exit status %d from child process\n",
+	      status);
+      goto err;
+    }
+  ret = 0;
+
+err:
+  if (outfd >= 0)
+    close (outfd);
+  if (infd >= 0)
+    close (infd);
+  if (execname)
+    {
+      unlink (execname);
+      free (execname);
+    }
+  if (dirname)
+    {
+      rmdir (dirname);
+      free (dirname);
+    }
+  return ret;
+}
+
+static int
+do_test (void)
+{
+  if (getenv ("PATH") == NULL)
+    {
+      printf ("PATH not set\n");
+      exit (1);
+    }
+  if (secure_getenv ("PATH") == NULL)
+    {
+      printf ("PATH not set according to secure_getenv\n");
+      exit (1);
+    }
+  if (strcmp (getenv ("PATH"), secure_getenv ("PATH")) != 0)
+    {
+      printf ("PATH mismatch (%s, %s)\n",
+	      getenv ("PATH"), secure_getenv ("PATH"));
+      exit (1);
+    }
+
+  gid_t target = choose_gid ();
+  if (target == 0)
+    {
+      fprintf (stderr,
+	       "Could not find a suitable GID for user %jd, skipping test\n",
+	       (intmax_t) getuid ());
+      exit (0);
+    }
+  return run_executable_sgid (target);
+}
+
+static void
+alternative_main (int argc, char **argv)
+{
+  if (argc == 2 && strcmp (argv[1], MAGIC_ARGUMENT) == 0)
+    {
+      if (getgid () == getegid ())
+	{
+	  /* This can happen if the file system is mounted nosuid.  */
+	  fprintf (stderr, "SGID failed: GID and EGID match (%jd)\n",
+		  (intmax_t) getgid ());
+	  exit (MAGIC_STATUS);
+	}
+      if (getenv ("PATH") == NULL)
+	{
+	  printf ("PATH variable not present\n");
+	  exit (3);
+	}
+      if (secure_getenv ("PATH") != NULL)
+	{
+	  printf ("PATH variable not filtered out\n");
+	  exit (4);
+	}
+      exit (MAGIC_STATUS);
+    }
+}
+
+#define PREPARE alternative_main
+#include <support/test-driver.c>
diff --git a/REORG.TODO/stdlib/tst-setcontext.c b/REORG.TODO/stdlib/tst-setcontext.c
new file mode 100644
index 0000000000..20b2ff6f3b
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-setcontext.c
@@ -0,0 +1,244 @@
+/* Copyright (C) 2001-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <errno.h>
+#include <signal.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ucontext.h>
+#include <unistd.h>
+
+static ucontext_t ctx[3];
+
+static int was_in_f1;
+static int was_in_f2;
+
+static char st2[32768];
+
+static void
+f1 (int a0, int a1, int a2, int a3)
+{
+  printf ("start f1(a0=%x,a1=%x,a2=%x,a3=%x)\n", a0, a1, a2, a3);
+
+  if (a0 != 1 || a1 != 2 || a2 != 3 || a3 != -4)
+    {
+      puts ("arg mismatch");
+      exit (-1);
+    }
+
+  if (swapcontext (&ctx[1], &ctx[2]) != 0)
+    {
+      printf ("%s: swapcontext: %m\n", __FUNCTION__);
+      exit (1);
+    }
+  puts ("finish f1");
+  was_in_f1 = 1;
+}
+
+static void
+f2 (void)
+{
+  char on_stack[1];
+
+  puts ("start f2");
+
+  printf ("&on_stack=%p\n", on_stack);
+  if (on_stack < st2 || on_stack >= st2 + sizeof (st2))
+    {
+      printf ("%s: memory stack is not where it belongs!", __FUNCTION__);
+      exit (1);
+    }
+
+  if (swapcontext (&ctx[2], &ctx[1]) != 0)
+    {
+      printf ("%s: swapcontext: %m\n", __FUNCTION__);
+      exit (1);
+    }
+  puts ("finish f2");
+  was_in_f2 = 1;
+}
+
+void
+test_stack (volatile int a, volatile int b,
+	    volatile int c, volatile int d)
+{
+  volatile int e = 5;
+  volatile int f = 6;
+  ucontext_t uc;
+
+  /* Test for cases where getcontext is clobbering the callers
+     stack, including parameters.  */
+  getcontext (&uc);
+
+  if (a != 1)
+    {
+      printf ("%s: getcontext clobbers parm a\n", __FUNCTION__);
+      exit (1);
+    }
+
+  if (b != 2)
+    {
+      printf ("%s: getcontext clobbers parm b\n", __FUNCTION__);
+      exit (1);
+    }
+
+  if (c != 3)
+    {
+      printf ("%s: getcontext clobbers parm c\n", __FUNCTION__);
+      exit (1);
+    }
+
+  if (d != 4)
+    {
+      printf ("%s: getcontext clobbers parm d\n", __FUNCTION__);
+      exit (1);
+    }
+
+  if (e != 5)
+    {
+      printf ("%s: getcontext clobbers varible e\n", __FUNCTION__);
+      exit (1);
+    }
+
+  if (f != 6)
+    {
+      printf ("%s: getcontext clobbers variable f\n", __FUNCTION__);
+      exit (1);
+    }
+}
+
+volatile int global;
+
+
+static int back_in_main;
+
+
+static void
+check_called (void)
+{
+  if (back_in_main == 0)
+    {
+      puts ("program did not reach main again");
+      _exit (1);
+    }
+}
+
+
+int
+main (void)
+{
+  atexit (check_called);
+
+  char st1[32768];
+  stack_t stack_before, stack_after;
+
+  sigaltstack (NULL, &stack_before);
+
+  puts ("making contexts");
+  if (getcontext (&ctx[1]) != 0)
+    {
+      if (errno == ENOSYS)
+	{
+	  back_in_main = 1;
+	  exit (0);
+	}
+
+      printf ("%s: getcontext: %m\n", __FUNCTION__);
+      exit (1);
+    }
+
+  test_stack (1, 2, 3, 4);
+
+  /* Play some tricks with this context.  */
+  if (++global == 1)
+    if (setcontext (&ctx[1]) != 0)
+      {
+	printf ("%s: setcontext: %m\n", __FUNCTION__);
+	exit (1);
+      }
+  if (global != 2)
+    {
+      printf ("%s: 'global' not incremented twice\n", __FUNCTION__);
+      exit (1);
+    }
+
+  ctx[1].uc_stack.ss_sp = st1;
+  ctx[1].uc_stack.ss_size = sizeof st1;
+  ctx[1].uc_link = &ctx[0];
+  {
+    ucontext_t tempctx = ctx[1];
+    makecontext (&ctx[1], (void (*) (void)) f1, 4, 1, 2, 3, -4);
+
+    /* Without this check, a stub makecontext can make us spin forever.  */
+    if (memcmp (&tempctx, &ctx[1], sizeof ctx[1]) == 0)
+      {
+	puts ("makecontext was a no-op, presuming not implemented");
+	return 0;
+      }
+  }
+
+  if (getcontext (&ctx[2]) != 0)
+    {
+      printf ("%s: second getcontext: %m\n", __FUNCTION__);
+      exit (1);
+    }
+  ctx[2].uc_stack.ss_sp = st2;
+  ctx[2].uc_stack.ss_size = sizeof st2;
+  ctx[2].uc_link = &ctx[1];
+  makecontext (&ctx[2], f2, 0);
+
+  puts ("swapping contexts");
+  if (swapcontext (&ctx[0], &ctx[2]) != 0)
+    {
+      printf ("%s: swapcontext: %m\n", __FUNCTION__);
+      exit (1);
+    }
+  puts ("back at main program");
+  back_in_main = 1;
+
+  sigaltstack (NULL, &stack_after);
+
+  if (was_in_f1 == 0)
+    {
+      puts ("didn't reach f1");
+      exit (1);
+    }
+  if (was_in_f2 == 0)
+    {
+      puts ("didn't reach f2");
+      exit (1);
+    }
+
+  /* Check sigaltstack state is not clobbered as in BZ #16629.  */
+  if (stack_before.ss_sp != stack_after.ss_sp)
+    {
+      printf ("stack ss_sp mismatch: %p %p\n",
+	      stack_before.ss_sp, stack_after.ss_sp);
+      exit (1);
+    }
+
+  if (stack_before.ss_size != stack_after.ss_size)
+    {
+      printf ("stack ss_size mismatch: %zd %zd\n",
+	      stack_before.ss_size, stack_after.ss_size);
+      exit (1);
+    }
+
+  puts ("test succeeded");
+  return 0;
+}
diff --git a/REORG.TODO/stdlib/tst-setcontext2.c b/REORG.TODO/stdlib/tst-setcontext2.c
new file mode 100644
index 0000000000..07fb974c46
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-setcontext2.c
@@ -0,0 +1,230 @@
+/* Testcase checks, if setcontext(), swapcontext() restores signal-mask
+   and if pending signals are delivered after those calls.
+   Copyright (C) 2015-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <signal.h>
+#include <ucontext.h>
+#include <unistd.h>
+
+volatile int global;
+volatile sig_atomic_t handlerCalled;
+
+static void
+check (const char *funcName)
+{
+  sigset_t set;
+
+  /* check if SIGUSR2 is unblocked after setcontext-call.  */
+  sigprocmask (SIG_BLOCK, NULL, &set);
+
+  if (sigismember (&set, SIGUSR2) != 0)
+    {
+      printf ("FAIL: SIGUSR2 is blocked after %s.\n", funcName);
+      exit (1);
+    }
+
+  if (sigismember (&set, SIGUSR1) != 1)
+    {
+      printf ("FAIL: SIGUSR1 is not blocked after %s.\n", funcName);
+      exit (1);
+    }
+}
+
+static void
+signalmask (int how, int signum)
+{
+  sigset_t set;
+  sigemptyset (&set);
+  sigaddset (&set, signum);
+  if (sigprocmask (how, &set, NULL) != 0)
+    {
+      printf ("FAIL: sigprocmaks (%d, %d, NULL): %m\n", how, signum);
+      exit (1);
+    }
+}
+
+static void
+signalpending (int signum, const char *msg)
+{
+  sigset_t set;
+  sigemptyset (&set);
+  if (sigpending (&set) != 0)
+    {
+      printf ("FAIL: sigpending: %m\n");
+      exit (1);
+    }
+  if (sigismember (&set, SIGUSR2) != 1)
+    {
+      printf ("FAIL: Signal %d is not pending %s\n", signum, msg);
+      exit (1);
+    }
+}
+
+static void
+handler (int __attribute__ ((unused)) signum)
+{
+  handlerCalled ++;
+}
+
+static int
+do_test (void)
+{
+  ucontext_t ctx, oldctx;
+  struct sigaction action;
+  pid_t pid;
+
+  pid = getpid ();
+
+  /* unblock SIGUSR2 */
+  signalmask (SIG_UNBLOCK, SIGUSR2);
+
+  /* block SIGUSR1 */
+  signalmask (SIG_BLOCK, SIGUSR1);
+
+  /* register handler for SIGUSR2  */
+  action.sa_flags = 0;
+  action.sa_handler = handler;
+  sigemptyset (&action.sa_mask);
+  sigaction (SIGUSR2, &action, NULL);
+
+  if (getcontext (&ctx) != 0)
+    {
+      printf ("FAIL: getcontext: %m\n");
+      exit (1);
+    }
+
+  global++;
+
+  if (global == 1)
+    {
+      puts ("after getcontext");
+
+      /* block SIGUSR2  */
+      signalmask (SIG_BLOCK, SIGUSR2);
+
+      /* send SIGUSR2 to me  */
+      handlerCalled = 0;
+      kill (pid, SIGUSR2);
+
+      /* was SIGUSR2 handler called?  */
+      if (handlerCalled != 0)
+	{
+	  puts ("FAIL: signal handler was called, but signal was blocked.");
+	  exit (1);
+	}
+
+      /* is SIGUSR2 pending?  */
+      signalpending (SIGUSR2, "before setcontext");
+
+      /* SIGUSR2 will be unblocked by setcontext-call.  */
+      if (setcontext (&ctx) != 0)
+	{
+	  printf ("FAIL: setcontext: %m\n");
+	  exit (1);
+	}
+    }
+  else if (global == 2)
+    {
+      puts ("after setcontext");
+
+      /* check SIGUSR1/2  */
+      check ("setcontext");
+
+      /* was SIGUSR2 handler called? */
+      if (handlerCalled != 1)
+	{
+	  puts ("FAIL: signal handler was not called after setcontext.");
+	  exit (1);
+	}
+
+      /* block SIGUSR2 */
+      signalmask (SIG_BLOCK, SIGUSR2);
+
+      /* send SIGUSR2 to me  */
+      handlerCalled = 0;
+      kill (pid, SIGUSR2);
+
+      /* was SIGUSR2 handler called?  */
+      if (handlerCalled != 0)
+	{
+	  puts ("FAIL: signal handler was called, but signal was blocked.");
+	  exit (1);
+	}
+
+      /* is SIGUSR2 pending?  */
+      signalpending (SIGUSR2, "before swapcontext");
+
+      if (swapcontext (&oldctx, &ctx) != 0)
+	{
+	  printf ("FAIL: swapcontext: %m\n");
+	  exit (1);
+	}
+
+      puts ("after returned from swapcontext");
+
+      if (global != 3)
+	{
+	  puts ("FAIL: returned from swapcontext without ctx-context called.");
+	  exit (1);
+	}
+
+      puts ("test succeeded");
+      return 0;
+    }
+  else if ( global != 3 )
+    {
+      puts ("FAIL: 'global' not incremented three times");
+      exit (1);
+    }
+
+  puts ("after swapcontext");
+  /* check SIGUSR1/2  */
+  check ("swapcontext");
+
+  /* was SIGUSR2 handler called? */
+  if (handlerCalled != 1)
+    {
+      puts ("FAIL: signal handler was not called after swapcontext.");
+      exit (1);
+    }
+
+  /* check sigmask in old context of swapcontext-call  */
+  if (sigismember (&oldctx.uc_sigmask, SIGUSR2) != 1)
+    {
+      puts ("FAIL: SIGUSR2 is not blocked in oldctx.uc_sigmask.");
+      exit (1);
+    }
+
+  if (sigismember (&oldctx.uc_sigmask, SIGUSR1) != 1)
+    {
+      puts ("FAIL: SIGUSR1 is not blocked in oldctx.uc_sigmaks.");
+      exit (1);
+    }
+
+  /* change to old context, which was gathered by swapcontext() call.  */
+  setcontext (&oldctx);
+
+  puts ("FAIL: returned from setcontext (&oldctx)");
+  exit (1);
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-setcontext3.c b/REORG.TODO/stdlib/tst-setcontext3.c
new file mode 100644
index 0000000000..414a9a7f41
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-setcontext3.c
@@ -0,0 +1,138 @@
+/* Bug 18125: Verify setcontext calls exit() and not _exit().
+   Copyright (C) 2015-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <errno.h>
+#include <signal.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ucontext.h>
+#include <unistd.h>
+#include <limits.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+
+/* Please note that depending on the outcome of Bug 18135 this test
+   may become invalid, and instead of testing for calling exit it
+   should be reworked to test for the last context calling
+   pthread_exit().  */
+
+static ucontext_t ctx;
+static char *filename;
+
+/* It is intended that this function does nothing.  */
+static void
+cf (void)
+{
+  printf ("called context function\n");
+}
+
+static void
+exit_called (void)
+{
+  int fd;
+  ssize_t res;
+  const char buf[] = "Called exit function\n";
+
+  fd = open (filename, O_WRONLY | O_CREAT, S_IRUSR | S_IWUSR);
+  if (fd == -1)
+    {
+      printf ("FAIL: Unable to create test file %s\n", filename);
+      exit (1);
+    }
+  res = write (fd, buf, sizeof (buf));
+  if (res != sizeof (buf))
+    {
+      printf ("FAIL: Expected to write test file in one write call.\n");
+      exit (1);
+    }
+  res = close (fd);
+  if (res == -1)
+    {
+      printf ("FAIL: Failed to close test file.\n");
+      exit (1);
+    }
+  printf ("PASS: %s", buf);
+}
+
+/* The test expects a filename given by the wrapper calling script.
+   The test then registers an atexit handler that will create the
+   file to indicate that the atexit handler ran. Then the test
+   creates a context, modifies it with makecontext, and sets it.
+   The context has only a single context which then must exit.
+   If it incorrectly exits via _exit then the atexit handler is
+   not run, the file is not created, and the wrapper detects this
+   and fails the test.  This test cannot be done using an _exit
+   interposer since setcontext avoids the PLT and calls _exit
+   directly.  */
+static int
+do_test (int argc, char **argv)
+{
+  int ret;
+  char st1[32768];
+  ucontext_t tempctx = ctx;
+
+  if (argc < 2)
+    {
+      printf ("FAIL: Test missing filename argument.\n");
+      exit (1);
+    }
+
+  filename = argv[1];
+
+  atexit (exit_called);
+
+  puts ("making contexts");
+  if (getcontext (&ctx) != 0)
+    {
+      if (errno == ENOSYS)
+	{
+	  /* Exit with 77 to mark the test as UNSUPPORTED.  */
+	  printf ("UNSUPPORTED: getcontext not implemented.\n");
+	  exit (77);
+	}
+
+      printf ("FAIL: getcontext failed.\n");
+      exit (1);
+    }
+
+  ctx.uc_stack.ss_sp = st1;
+  ctx.uc_stack.ss_size = sizeof (st1);
+  ctx.uc_link = 0;
+  makecontext (&ctx, cf, 0);
+
+  /* Without this check, a stub makecontext can make us spin forever.  */
+  if (memcmp (&tempctx, &ctx, sizeof ctx) == 0)
+    {
+      puts ("UNSUPPORTED: makecontext was a no-op, presuming not implemented");
+      exit (77);
+    }
+
+  ret = setcontext (&ctx);
+  if (ret != 0)
+    {
+      printf ("FAIL: setcontext returned with %d and errno of %d.\n", ret, errno);
+      exit (1);
+    }
+
+  printf ("FAIL: Impossibly returned to main.\n");
+  exit (1);
+}
+
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-setcontext3.sh b/REORG.TODO/stdlib/tst-setcontext3.sh
new file mode 100644
index 0000000000..158d0dc0a8
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-setcontext3.sh
@@ -0,0 +1,52 @@
+#!/bin/sh
+# Bug 18125: Test the exit functionality of setcontext().
+# Copyright (C) 2015-2017 Free Software Foundation, Inc.
+# This file is part of the GNU C Library.
+
+# The GNU C Library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+
+# The GNU C 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
+# Lesser General Public License for more details.
+
+# You should have received a copy of the GNU Lesser General Public
+# License along with the GNU C Library; if not, see
+# <http://www.gnu.org/licenses/>.
+
+set -e
+
+common_objpfx=$1
+test_program_prefix_before_env=$2
+run_program_env=$3
+test_program_prefix_after_env=$4
+objpfx=$5
+
+test_pre="${test_program_prefix_before_env} ${run_program_env}"
+test="${test_program_prefix_after_env} ${objpfx}tst-setcontext3"
+out=${objpfx}tst-setcontext3.out
+
+cleanup() {
+  rm -f $tempfile
+}
+trap cleanup 0
+
+tempfile=$(mktemp "tst-setcontext3.XXXXXXXXXX")
+
+# We want to run the test program and see if secontext called
+# exit() and wrote out the test file we specified.  If the
+# test exits with a non-zero status this will fail because we
+# are using `set -e`.
+$test_pre $test "$tempfile"
+
+# Look for resulting file.
+if [ -e "$tempfile" ]; then
+  echo "PASS: tst-setcontext3 an exit() and created $tempfile"
+  exit 0
+else
+  echo "FAIL: tst-setcontext3 did not create $tempfile"
+  exit 1
+fi
diff --git a/REORG.TODO/stdlib/tst-strfmon_l.c b/REORG.TODO/stdlib/tst-strfmon_l.c
new file mode 100644
index 0000000000..49fa31907e
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-strfmon_l.c
@@ -0,0 +1,220 @@
+/* Test locale dependence of strfmon_l.
+   Copyright (C) 2016-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <stdbool.h>
+#include <stdio.h>
+#include <monetary.h>
+#include <string.h>
+#include <stdlib.h>
+#include <locale.h>
+
+static const char *const en_us_name = "en_US.ISO-8859-1";
+
+/* Locale value to be used by tests.  */
+static locale_t loc;
+static const char *loc_name;
+
+/* Set the global locale to GLOBAL_NAME, and the locale referenced by
+   the loc variable above to LOCAL_NAME.  */
+static void
+init_loc (const char *global_name, const char *local_name)
+{
+  loc = newlocale (LC_ALL_MASK, local_name, 0);
+  if (loc == 0)
+    {
+      printf ("error: newlocale (%s): %m\n", local_name);
+      abort ();
+    }
+  loc_name = local_name;
+
+  if (setlocale (LC_ALL, global_name) == NULL)
+    {
+      printf ("error: setlocale (%s): %m\n", global_name);
+      abort ();
+    }
+}
+
+/* Expected strings for a positive or negative value.  */
+struct testcase
+{
+  const char *i;                /* %i */
+  const char *n;                /* %n */
+  const char *i_ungrouped;      /* %^i */
+  const char *n_ungrouped;      /* %^n */
+};
+
+/* Collected expected strings for both positive and negative
+   values.  */
+struct testcase_pair
+{
+  struct testcase positive;     /* 1234567.89 */
+  struct testcase negative;     /* -1234567.89 */
+};
+
+static bool errors;
+
+/* Test one value using the locale loc.  */
+static void
+test_one (const char *format, double value, const char *expected)
+{
+  static char actual[64];
+  int result = strfmon_l (actual, sizeof (actual), loc, format, value);
+  if (result < 0)
+    {
+      printf ("error: locale %s, format \"%s\", value %g: strfmon_l: %m\n",
+              loc_name, format, value);
+      errors = true;
+    }
+  else if (strcmp (actual, expected) != 0)
+    {
+      printf ("error: locale %s, format \"%s\", value %g: mismatch\n",
+              loc_name, format, value);
+      printf ("error:   expected: \"%s\"\n", expected);
+      printf ("error:   actual:   \"%s\"\n", actual);
+      errors = true;
+    }
+}
+
+static void
+test_pair (const struct testcase_pair *pair)
+{
+  double positive = 1234567.89;
+  test_one ("%i", positive, pair->positive.i);
+  test_one ("%n", positive, pair->positive.n);
+  test_one ("%^i", positive, pair->positive.i_ungrouped);
+  test_one ("%^n", positive, pair->positive.n_ungrouped);
+  double negative = -1234567.89;
+  test_one ("%i", negative, pair->negative.i);
+  test_one ("%n", negative, pair->negative.n);
+  test_one ("%^i", negative, pair->negative.i_ungrouped);
+  test_one ("%^n", negative, pair->negative.n_ungrouped);
+}
+
+static const struct testcase_pair en_us =
+  {
+    {
+      "USD 1,234,567.89", "$1,234,567.89",
+      "USD 1234567.89", "$1234567.89"
+    },
+    {
+      "-USD 1,234,567.89", "-$1,234,567.89",
+      "-USD 1234567.89", "-$1234567.89"
+    }
+  };
+
+static void
+test_en_us (const char *other_name)
+{
+  init_loc (other_name, en_us_name);
+  test_pair (&en_us);
+  freelocale (loc);
+}
+
+struct locale_pair
+{
+  const char *locale_name;
+  struct testcase_pair pair;
+};
+
+static const struct locale_pair tests[] =
+  {
+    {
+      "de_DE.UTF-8",
+      {
+        {
+         "1.234.567,89 EUR", "1.234.567,89 \u20ac",
+         "1234567,89 EUR", "1234567,89 \u20ac"
+        },
+        {
+         "-1.234.567,89 EUR", "-1.234.567,89 \u20ac",
+         "-1234567,89 EUR", "-1234567,89 \u20ac"
+        }
+      },
+    },
+    {
+      "tg_TJ.UTF-8",
+      {
+        {
+          "1 234 567.89 TJS", "1 234 567.89 \u0440\u0443\u0431",
+          "1234567.89 TJS", "1234567.89 \u0440\u0443\u0431"
+        },
+        {
+          "-1 234 567.89 TJS", "-1 234 567.89 \u0440\u0443\u0431",
+          "-1234567.89 TJS", "-1234567.89 \u0440\u0443\u0431"
+        }
+      }
+    },
+    {
+      "te_IN.UTF-8",
+      {
+        {
+          "INR12,34,567.89", "\u20b912,34,567.89",
+          "INR1234567.89", "\u20b91234567.89"
+        },
+        {
+          "-INR12,34,567.89", "-\u20b912,34,567.89",
+          "-INR1234567.89", "-\u20b91234567.89"
+        }
+      }
+    },
+    {
+      "bn_IN.UTF-8",
+      {
+        {
+          "INR 12,345,67.89", "\u20b9 12,345,67.89",
+          "INR 1234567.89", "\u20b9 1234567.89"
+        },
+        {
+          "-INR 12,345,67.89", "-\u20b9 12,345,67.89",
+          "-INR 1234567.89", "-\u20b9 1234567.89"
+        }
+      }
+    },
+    {
+      "el_GR.UTF-8",
+      {
+        {
+          "1.234.567,89EUR", "1.234.567,89\u20ac",
+          "1234567,89EUR", "1234567,89\u20ac"
+        },
+        {
+          "-EUR1.234.567,89", "-\u20ac1.234.567,89",
+          "-EUR1234567,89", "-\u20ac1234567,89",
+        }
+      }
+    },
+    {}
+  };
+
+static int
+do_test (void)
+{
+  for (const struct locale_pair *test = tests;
+       test->locale_name != NULL; ++test)
+    {
+      init_loc (en_us_name, test->locale_name);
+      test_pair (&test->pair);
+      freelocale (loc);
+      test_en_us (test->locale_name);
+    }
+
+  return errors;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-strfrom-locale.c b/REORG.TODO/stdlib/tst-strfrom-locale.c
new file mode 100644
index 0000000000..f01b42d575
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-strfrom-locale.c
@@ -0,0 +1,91 @@
+/* Tests for strfromf, strfromd, strfroml functions.
+   Copyright (C) 2016-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include "tst-strfrom.h"
+
+static const struct test tests[] = {
+  TEST ("12,345000", "%f", 50, 9, 12.345),
+  TEST ("9,999", "%.3f", 50, 5, 9.999),
+  TEST ("0,125000", "%f", 50, 8, .125),
+  TEST ("0,000000", "%f", 50, 8, .0),
+  TEST ("0", "%g", 50, 1, .0),
+  TEST ("9,900000", "%f", 50, 8, 9.9),
+  TEST ("9,1", "%.5f", 4, 7, 9.123456),
+  TEST ("9,91235", "%g", 50, 7, 9.91234567812345678),
+  TEST ("79,8765", "%G", 50, 7, 79.8765432111),
+  TEST ("79,9", "%.3g", 50, 4, 79.8765432111),
+  TEST ("1,000000e+38", "%e", 50, 12, 1e+38),
+  TEST ("1,000000e+38", "%e", 50, 12, 1e38),
+  TEST ("-1,000000e-37", "%e", 50, 13, -1e-37),
+  TEST ("1,000000e-37", "%e", 50, 12, 0.00000001e-29),
+  TEST ("1,000000e-37", "%e", 50, 12, 1.000000e-37),
+  TEST ("5,900000e-16", "%e", 50, 12, 5.9e-16),
+  TEST ("1,234500e+20", "%e", 50, 12, 12.345e19),
+  TEST ("1,000000e+05", "%e", 50, 12, 1e5),
+  TEST ("-NAN", "%G", 50, 4, -NAN_),
+  TEST ("-inf", "%g", 50, 4, -INF),
+  TEST ("inf", "%g", 50, 3, INF)
+};
+/* Tests with buffer size small.  */
+static const struct test stest[] = {
+  TEST ("1234", "%g", 5, 7, 12345.345),
+  TEST ("0,12", "%f", 5, 8, .125),
+  TEST ("9,99", "%.3f", 5, 5, 9.999),
+  TEST ("100", "%g", 5, 3, 1e2)
+};
+/* Hexadecimal tests.  */
+static const struct htests htest[] = {
+  HTEST ("%a", { "0x1,ffp+6", "0x3,fep+5", "0x7,fcp+4", "0xf,f8p+3" },
+	0x1.ffp+6),
+  HTEST ("%a", { "0x1,88p+4", "0x3,1p+3", "0x6,2p+2", "0xc,4p+1" },
+	0x1.88p+4),
+  HTEST ("%A", { "-0X1,88P+5", "-0X3,1P+4", "-0X6,2P+3", "-0XC,4P+2" },
+	-0x1.88p+5),
+  HTEST ("%a", { "0x1,44p+10", "0x2,88p+9", "0x5,1p+8", "0xa,2p+7" },
+	0x1.44p+10),
+  HTEST ("%a", { "0x1p-10", "0x2p-11", "0x4p-12", "0x8p-13" },
+	0x0.0040p+0),
+  HTEST ("%a", { "0x1,4p+3", "0x2,8p+2", "0x5p+1", "0xap+0" },
+	10.0)
+};
+
+GEN_TEST_STRTOD_FOREACH (TEST_STRFROM)
+
+static int
+test_locale (const char *locale)
+{
+  printf ("Testing in locale: %s\n", locale);
+  if (setlocale (LC_ALL, locale) == NULL)
+    {
+      printf ("Cannot set locale %s\n", locale);
+    }
+  return STRTOD_TEST_FOREACH (test_);
+}
+
+static int
+do_test (void)
+{
+  int result = 0;
+  result += test_locale ("de_DE.UTF-8");
+  result += test_locale ("tr_TR.ISO-8859-9");
+  result += test_locale ("tr_TR.UTF-8");
+  return result;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-strfrom.c b/REORG.TODO/stdlib/tst-strfrom.c
new file mode 100644
index 0000000000..5aa54fa7cb
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-strfrom.c
@@ -0,0 +1,91 @@
+/* Tests for strfromf, strfromd, strfroml functions.
+   Copyright (C) 2016-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include "tst-strfrom.h"
+
+static const struct test tests[] = {
+  TEST ("12.345000", "%f", 50, 9, 12.345),
+  TEST ("9.999", "%.3f", 50, 5, 9.999),
+  TEST ("0.125000", "%f", 50, 8, .125),
+  TEST ("0.000000", "%f", 50, 8, .0),
+  TEST ("0", "%g", 50, 1, .0),
+  TEST ("9.900000", "%f", 50, 8, 9.9),
+  TEST ("9.1", "%.5f", 4, 7, 9.123456),
+  TEST ("9.91235", "%g", 50, 7, 9.91234567812345678),
+  TEST ("79.8765", "%G", 50, 7, 79.8765432111),
+  TEST ("79.9", "%.3g", 50, 4, 79.8765432111),
+  TEST ("1.000000e+38", "%e", 50, 12, 1e+38),
+  TEST ("1.000000e+38", "%e", 50, 12, 1e38),
+  TEST ("-1.000000e-37", "%e", 50, 13, -1e-37),
+  TEST ("1.000000e-37", "%e", 50, 12, 0.00000001e-29),
+  TEST ("1.000000e-37", "%e", 50, 12, 1.000000e-37),
+  TEST ("5.900000e-16", "%e", 50, 12, 5.9e-16),
+  TEST ("1.234500e+20", "%e", 50, 12, 12.345e19),
+  TEST ("1.000000e+05", "%e", 50, 12, 1e5),
+  TEST ("-NAN", "%G", 50, 4, -NAN_),
+  TEST ("-inf", "%g", 50, 4, -INF),
+  TEST ("inf", "%g", 50, 3, INF)
+};
+/* Tests with buffer size small.  */
+static const struct test stest[] = {
+  TEST ("1234", "%g", 5, 7, 12345.345),
+  TEST ("0.12", "%f", 5, 8, .125),
+  TEST ("9.99", "%.3f", 5, 5, 9.999),
+  TEST ("100", "%g", 5, 3, 1e2)
+};
+/* Hexadecimal tests.  */
+static const struct htests htest[] = {
+  HTEST ("%a", { "0x1.ffp+6", "0x3.fep+5", "0x7.fcp+4", "0xf.f8p+3" },
+	0x1.ffp+6),
+  HTEST ("%a", { "0x1.88p+4", "0x3.1p+3", "0x6.2p+2", "0xc.4p+1" },
+	0x1.88p+4),
+  HTEST ("%A", { "-0X1.88P+5", "-0X3.1P+4", "-0X6.2P+3", "-0XC.4P+2" },
+	-0x1.88p+5),
+  HTEST ("%a", { "0x1.44p+10", "0x2.88p+9", "0x5.1p+8", "0xa.2p+7" },
+	0x1.44p+10),
+  HTEST ("%a", { "0x1p-10", "0x2p-11", "0x4p-12", "0x8p-13" },
+	0x0.0040p+0),
+  HTEST ("%a", { "0x1.4p+3", "0x2.8p+2", "0x5p+1", "0xap+0" },
+	10.0)
+};
+
+GEN_TEST_STRTOD_FOREACH (TEST_STRFROM)
+
+static int
+test_locale (const char *locale)
+{
+  printf ("Testing in locale: %s\n", locale);
+  if (setlocale (LC_ALL, locale) == NULL)
+    {
+      printf ("Cannot set locale %s\n", locale);
+    }
+  return STRTOD_TEST_FOREACH (test_);
+}
+
+static int
+do_test (void)
+{
+  int result = 0;
+  result += test_locale ("C");
+  result += test_locale ("en_US.ISO-8859-1");
+  result += test_locale ("en_US.UTF-8");
+  return result;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-strfrom.h b/REORG.TODO/stdlib/tst-strfrom.h
new file mode 100644
index 0000000000..86c0c19392
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-strfrom.h
@@ -0,0 +1,120 @@
+/* Tests for strfromf, strfromd, strfroml functions.
+   Copyright (C) 2016-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <float.h>
+#include <math.h>
+#include <locale.h>
+
+#include "tst-strtod.h"
+
+#define _CONCAT(a, b) a ## b
+#define CONCAT(a, b) _CONCAT (a, b)
+
+/* Generator to create an FTYPE member variabled named FSUF
+ *    used to populate struct member variables.  */
+#define FTYPE_MEMBER(FSUF, FTYPE, FTOSTR, LSUF, CSUF)  \
+       FTYPE FSUF;
+
+#define STRUCT_FOREACH_FLOAT_FTYPE GEN_TEST_STRTOD_FOREACH (FTYPE_MEMBER)
+
+#define ENTRY(FSUF, FTYPE, FTOSTR, LSUF, CSUF, ...)  \
+   CONCAT (__VA_ARGS__, LSUF),
+/* This is hacky way around the seemingly unavoidable macro
+ * expansion of the INFINITY or HUGE_VAL like macros in the
+ * above.  It is assumed the compiler will implicitly convert
+ * the infinity correctly.  */
+#define INF INFINITY + 0.0
+#define NAN_ NAN + 0.0
+
+struct test_input
+{
+  STRUCT_FOREACH_FLOAT_FTYPE
+};
+struct test {
+  const char *s;
+  const char *fmt;
+  int size;
+  int rc;
+  struct test_input t;
+};
+#define TEST(s, fmt, size, rc, val)				\
+  {								\
+    s, fmt, size, rc, { GEN_TEST_STRTOD_FOREACH (ENTRY, val) }	\
+  }
+/* Hexadecimal tests.  */
+struct htests
+{
+  const char *fmt;
+  const char *exp[4];
+  struct test_input t;
+};
+#define HTEST(fmt, exp1, exp2, exp3, exp4, val)				  \
+  {									  \
+    fmt, exp1, exp2, exp3, exp4, { GEN_TEST_STRTOD_FOREACH (ENTRY, val) } \
+  }
+
+#define TEST_STRFROM(FSUF, FTYPE, FTOSTR, LSUF, CSUF)			\
+static int								\
+test_ ## FSUF (void)							\
+{									\
+  char buf[50], sbuf[5];						\
+  int status = 0;							\
+  int i, rc = 0, rc1 = 0;						\
+  for (i = 0; i < sizeof (stest) / sizeof (stest[0]); i++)		\
+    {									\
+      rc = FTOSTR (sbuf, stest[i].size, stest[i].fmt, stest[i].t.FSUF);	\
+      rc1 = (strcmp (sbuf, stest[i].s) != 0) || (rc != stest[i].rc);	\
+      if (rc1)								\
+	{								\
+	  printf (#FTOSTR ": got %s (%d), expected %s (%d)\n",		\
+		  sbuf, rc, stest[i].s, stest[i].rc);			\
+	  status++;							\
+	}								\
+    }									\
+  for (i = 0; i < sizeof (tests) / sizeof (tests[0]); i++)		\
+    {									\
+      rc = FTOSTR (buf, tests[i].size, tests[i].fmt, tests[i].t.FSUF);	\
+      rc1 = (strcmp (buf, tests[i].s) != 0) || (rc != tests[i].rc);	\
+      if (rc1)								\
+	{								\
+	  printf (#FTOSTR ": got %s (%d), expected %s (%d)\n",		\
+		  buf, rc, tests[i].s, tests[i].rc);			\
+	  status++;							\
+	}								\
+    }									\
+  for (i = 0; i < sizeof (htest) / sizeof (htest[0]); i++)		\
+    {									\
+      rc = FTOSTR (buf, 50, htest[i].fmt, htest[i].t.FSUF);		\
+      if (strcmp (buf, htest[i].exp[0]) == 0 ||				\
+	  strcmp (buf, htest[i].exp[1]) == 0 ||				\
+	  strcmp (buf, htest[i].exp[2]) == 0 ||				\
+	  strcmp (buf, htest[i].exp[3]) == 0)				\
+	continue;							\
+      else								\
+	{								\
+	  printf (#FTOSTR ": got %s (%d), expected %s or %s or %s "	\
+		  "or %s\n", buf, rc, htest[i].exp[0], htest[i].exp[1],	\
+		  htest[i].exp[2], htest[i].exp[3]);			\
+	  status++;							\
+	}								\
+    }									\
+  return status;							\
+}
diff --git a/REORG.TODO/stdlib/tst-strtod-nan-locale-main.c b/REORG.TODO/stdlib/tst-strtod-nan-locale-main.c
new file mode 100644
index 0000000000..8044dad89f
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-strtod-nan-locale-main.c
@@ -0,0 +1,89 @@
+/* Test strtod functions work with all ASCII letters in NAN(...) in
+   Turkish locales (bug 19266).
+   Copyright (C) 2015-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <locale.h>
+#include <math.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <wchar.h>
+
+#define STR_(X) #X
+#define STR(X) STR_(X)
+#define FNPFXS STR (FNPFX)
+#define CONCAT_(X, Y) X ## Y
+#define CONCAT(X, Y) CONCAT_ (X, Y)
+#define FNX(FN) CONCAT (FNPFX, FN)
+
+#define TEST(LOC, STR, FN, TYPE)					\
+  do									\
+    {									\
+      CHAR *ep;								\
+      TYPE val = FNX (FN) (STR, &ep);					\
+      if (isnan (val) && *ep == 0)					\
+	printf ("PASS: %s: " FNPFXS #FN " (" SFMT ")\n", LOC, STR);	\
+      else								\
+	{								\
+	  printf ("FAIL: %s: " FNPFXS #FN " (" SFMT ")\n", LOC, STR);	\
+	  result = 1;							\
+	}								\
+    }									\
+  while (0)
+
+static int
+test_one_locale (const char *loc)
+{
+  if (setlocale (LC_ALL, loc) == NULL)
+    {
+      printf ("setlocale (LC_ALL, \"%s\") failed\n", loc);
+      return 1;
+    }
+  int result = 0;
+  for (int i = 10; i < 36; i++)
+    {
+      CHAR s[7];
+      s[0] = L_('N');
+      s[1] = L_('A');
+      s[2] = L_('N');
+      s[3] = L_('(');
+      s[4] = L_('A') + i - 10;
+      s[5] = L_(')');
+      s[6] = 0;
+      TEST (loc, s, f, float);
+      TEST (loc, s, d, double);
+      TEST (loc, s, ld, long double);
+      s[4] = L_('a') + i - 10;
+      TEST (loc, s, f, float);
+      TEST (loc, s, d, double);
+      TEST (loc, s, ld, long double);
+    }
+  return result;
+}
+
+static int
+do_test (void)
+{
+  int result = 0;
+  result |= test_one_locale ("C");
+  result |= test_one_locale ("tr_TR.UTF-8");
+  result |= test_one_locale ("tr_TR.ISO-8859-9");
+  return result;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-strtod-nan-locale.c b/REORG.TODO/stdlib/tst-strtod-nan-locale.c
new file mode 100644
index 0000000000..cf0820df75
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-strtod-nan-locale.c
@@ -0,0 +1,25 @@
+/* Test strtod functions work with all ASCII letters in NAN(...) in
+   Turkish locales (bug 19266).  Narrow string version.
+   Copyright (C) 2015-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#define CHAR char
+#define SFMT "\"%s\""
+#define FNPFX strto
+#define L_(C) C
+
+#include <tst-strtod-nan-locale-main.c>
diff --git a/REORG.TODO/stdlib/tst-strtod-overflow.c b/REORG.TODO/stdlib/tst-strtod-overflow.c
new file mode 100644
index 0000000000..c1eb561dec
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-strtod-overflow.c
@@ -0,0 +1,49 @@
+/* Test for integer/buffer overflow in strtod.
+   Copyright (C) 2012-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#define EXPONENT "e-2147483649"
+#define SIZE 214748364
+
+static int
+do_test (void)
+{
+  char *p = malloc (1 + SIZE + sizeof (EXPONENT));
+  if (p == NULL)
+    {
+      puts ("malloc failed, cannot test for overflow");
+      return 0;
+    }
+  p[0] = '1';
+  memset (p + 1, '0', SIZE);
+  memcpy (p + 1 + SIZE, EXPONENT, sizeof (EXPONENT));
+  double d = strtod (p, NULL);
+  if (d != 0)
+    {
+      printf ("strtod returned wrong value: %a\n", d);
+      return 1;
+    }
+  return 0;
+}
+
+#define TEST_FUNCTION do_test ()
+#define TIMEOUT 30
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-strtod-round-data b/REORG.TODO/stdlib/tst-strtod-round-data
new file mode 100644
index 0000000000..cb908036fd
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-strtod-round-data
@@ -0,0 +1,150 @@
+3.518437208883201171875E+013
+1.00000005960464477550
+1.0000000596046447755
+1.000000059604644776
+1.000000059604644775
+1.00000005960464478
+1.0000000596046448
+1.000000059604645
+1.00000005960464
+1.0000000596046
+1.000000059605
+1.00000005960
+1.0000000596
+1.000000060
+1.00000006
+1.0000001
+1.000000
+1.00000000000000011113
+1.00000000000000011103
+1.00000000000000011102
+1.00000000000000011101
+1.0000000000000001111
+1.000000000000000111
+1.00000000000000011
+1.0000000000000001
+3929201589819414e-25
+0.000000000000000000000000000000000000000000002101947696487225606385594374934874196920392912814773657635602425834686624028790902229957282543182373046875
+1.00000005960464477539062499
+1.000000059604644775390625
+1.00000005960464477539062501
+1.00000011920928955078125
+1.00000017881393432617187499
+1.000000178813934326171875
+1.00000017881393432617187501
+1.0000002384185791015625
+1.08420217248550443400745280086994171142578125e-19
+1.0842022371089897897127399001987457793916291848290711641311645507812499e-19
+1.08420223710898978971273990019874577939162918482907116413116455078125e-19
+1.0842022371089897897127399001987457793916291848290711641311645507812501e-19
+1.0842023017324751454180269995275498473574771196581423282623291015625e-19
+1.0842023663559605011233140988563539153233250544872134923934936523437499e-19
+1.08420236635596050112331409885635391532332505448721349239349365234375e-19
+1.0842023663559605011233140988563539153233250544872134923934936523437501e-19
+1.084202430979445856828601198185157983289172989316284656524658203125e-19
+7.52316384526264005099991383822237233803945956334136013765601092018187046051025390625e-37
+7.5231642936781486349413765338158389908126215730251815381410578824437213052434003657253924757242202758789062499e-37
+7.52316429367814863494137653381583899081262157302518153814105788244372130524340036572539247572422027587890625e-37
+7.5231642936781486349413765338158389908126215730251815381410578824437213052434003657253924757242202758789062501e-37
+7.5231647420936572188828392294093056435857835827090029386261048447055721499765468252007849514484405517578125e-37
+7.5231651905091658028243019250027722963589455923928243391111518069674229947096932846761774271726608276367187499e-37
+7.52316519050916580282430192500277229635894559239282433911115180696742299470969328467617742717266082763671875e-37
+7.5231651905091658028243019250027722963589455923928243391111518069674229947096932846761774271726608276367187501e-37
+7.523165638924674386765764620596238949132107602076645739596198769229273839442839744151569902896881103515625e-37
+340282356779733661637539395458142568447.999
+340282356779733661637539395458142568448
+340282356779733661637539395458142568448.001
+-340282356779733661637539395458142568447.999
+-340282356779733661637539395458142568448
+-340282356779733661637539395458142568448.001
+179769313486231580793728971405303415079934132710037826936173778980444968292764750946649017977587207096330286416692887910946555547851940402630657488671505820681908902000708383676273854845817711531764475730270069855571366959622842914819860834936475292719074168444365510704342711559699508093042880177904174497791.999
+179769313486231580793728971405303415079934132710037826936173778980444968292764750946649017977587207096330286416692887910946555547851940402630657488671505820681908902000708383676273854845817711531764475730270069855571366959622842914819860834936475292719074168444365510704342711559699508093042880177904174497792
+179769313486231580793728971405303415079934132710037826936173778980444968292764750946649017977587207096330286416692887910946555547851940402630657488671505820681908902000708383676273854845817711531764475730270069855571366959622842914819860834936475292719074168444365510704342711559699508093042880177904174497792.001
+-179769313486231580793728971405303415079934132710037826936173778980444968292764750946649017977587207096330286416692887910946555547851940402630657488671505820681908902000708383676273854845817711531764475730270069855571366959622842914819860834936475292719074168444365510704342711559699508093042880177904174497791.999
+-179769313486231580793728971405303415079934132710037826936173778980444968292764750946649017977587207096330286416692887910946555547851940402630657488671505820681908902000708383676273854845817711531764475730270069855571366959622842914819860834936475292719074168444365510704342711559699508093042880177904174497792
+-179769313486231580793728971405303415079934132710037826936173778980444968292764750946649017977587207096330286416692887910946555547851940402630657488671505820681908902000708383676273854845817711531764475730270069855571366959622842914819860834936475292719074168444365510704342711559699508093042880177904174497792.001
+1189731495357231765053511589829488667966254004695567218956499277562499181851727204760449442904570461384330567646167443286662555267489487930236325136097654342377232417536489080362029584951246485605740928178136611230674219048500381811805207877203107268812398885808170517032687767579195512604426112969939697309064970421357373593737548189791064578075396520278041564919877710332117871859964923206311175434753221226253534337199304629504137668677812103359730222935610071343425325633562626092674600633358193879055413937592435479934747155496913520748914500847834599706604816899916747713074435514585511372746030946789075371775796999312354227866587803370992862072730331502951338476357350089453460696354521572546926077765383044577075982892200047380230605947983926605074559374288887635146614087580689065065271437207231562037396763728185780908406142166217047877746112568232134313256340568095056911759884246066540728231159508276273778086735741815471986687141421432344475502062691975457742639931301197788106590436213127071090684338861628772228444915189303418963135612389885203608036075349871783050435209372998381734440835020273404521625820382960095748088096587424348978607559613437524195438026532392163371033702927429354975024746264545597290170945602348672367013792302348098432637396409095613884932277251719835310031547998505803752546406866843706502753183166325399209709698038388729144247605351114448647488475730429635692916794001788966968620265007002798266353024717022066273037990476329714600171995445673732316103762568799871343179341500144434361457105461379244904895252415230182712399067436456639767780598951274425173976825259444309519076481099524794546856555816525710213317614010389620491220471110091857573837438278112540147709446027133781874510952001326117006323864207925852079541370644269957126564493435341201207708574988136737425864785839645124060309307041974867276363338370018636105162869283008917743830711050229193144085029688094638483773246680141155923835213247853616763725824680857167751837090780487900840228387283614547346509044804890143691849792564977383927445249156165014494875205013001248617782698812613355440377357151258089863597284198597765215866830359241005748505543689358738031324284465243629136488333487686637331181039189590604124992017972343852392605049057443576119873279945400832860199527936922650062116335246759763699388664096895732875994904427617012292176896143437273923395471742216159840248646356256801083915667206811346470984128630513747606135060039717590702096972930814428759032404269759101709671790756463178143949787623821836792662477247624052842849718333550449622140658955581054081751312471819712726722479962465958577056952080928160441258225609897705262614494607339126216928069521406520619119688243287473394538225119027875465220992256233111477265049726174251028452120761620567236506258269287781320020740354052506311094266116406810709272834304862320539294205143454357131313879679493260017348668942730474494178249137387898297328336833589009038180169681270850774180709517707029996636939683240047817287633101083794404428541740415811916696232677498555197744273877942786661835044988438574758774422356087368185157228627335879058660154558309535912070401295584736621504268847267595223765835863174255756697267818931047523414328918687705134068360361363742640382966108545994545911705825697417989043286767551310728319742954355856116731710961138337957358885918445698641669559694166808074917226884181158917536699176609687522288426691820400183361523559409155799556283862329497478912575261457830579497761228960488413082611130636745385531466634515743840239035698486403517044157039226831085528805370810274043977756176084122952933117637894899009906118591255725255303492783199432613047841255537488113392259699564654048366964907825009036946741350368993216860237824660346368178183476516236016631293185747612693520285606412666148401080833153012602745585750872969103848152851344605317151546396041150523486651715472516090757848631964035419441554251667764234034722117421393132102998968842527073068624998951156916755512381404671428195378673434142765187038589280087599553911407299582781759652177398265112189244631130776935980062283655148992367895151475032666162688096176262281649169171506024644941424855074678761732513983988468070793092275675388024763356241941156378024394000502219343689759498466840264622527907455975633934878799543518206521383037618795439338086429200645002065120039545639315698201147683480515936292743251499063438531296922453863968872815997353125881179686462705170051219974666064694475306164653842558263043808428507798331085671416437696164008096171739721381877119714312306163210350382599226246553966125970240408129674442076735944784179006667645805896851048093638137596670696937010699212957919299380937222250509562807981779341384684146547286314982564181910419531236194060603634063907761401557097370591258981203660079555061603095538604465962028762337280258716255780315038694244061790279947528902264433516193654532433289688740976918527.999
+1189731495357231765053511589829488667966254004695567218956499277562499181851727204760449442904570461384330567646167443286662555267489487930236325136097654342377232417536489080362029584951246485605740928178136611230674219048500381811805207877203107268812398885808170517032687767579195512604426112969939697309064970421357373593737548189791064578075396520278041564919877710332117871859964923206311175434753221226253534337199304629504137668677812103359730222935610071343425325633562626092674600633358193879055413937592435479934747155496913520748914500847834599706604816899916747713074435514585511372746030946789075371775796999312354227866587803370992862072730331502951338476357350089453460696354521572546926077765383044577075982892200047380230605947983926605074559374288887635146614087580689065065271437207231562037396763728185780908406142166217047877746112568232134313256340568095056911759884246066540728231159508276273778086735741815471986687141421432344475502062691975457742639931301197788106590436213127071090684338861628772228444915189303418963135612389885203608036075349871783050435209372998381734440835020273404521625820382960095748088096587424348978607559613437524195438026532392163371033702927429354975024746264545597290170945602348672367013792302348098432637396409095613884932277251719835310031547998505803752546406866843706502753183166325399209709698038388729144247605351114448647488475730429635692916794001788966968620265007002798266353024717022066273037990476329714600171995445673732316103762568799871343179341500144434361457105461379244904895252415230182712399067436456639767780598951274425173976825259444309519076481099524794546856555816525710213317614010389620491220471110091857573837438278112540147709446027133781874510952001326117006323864207925852079541370644269957126564493435341201207708574988136737425864785839645124060309307041974867276363338370018636105162869283008917743830711050229193144085029688094638483773246680141155923835213247853616763725824680857167751837090780487900840228387283614547346509044804890143691849792564977383927445249156165014494875205013001248617782698812613355440377357151258089863597284198597765215866830359241005748505543689358738031324284465243629136488333487686637331181039189590604124992017972343852392605049057443576119873279945400832860199527936922650062116335246759763699388664096895732875994904427617012292176896143437273923395471742216159840248646356256801083915667206811346470984128630513747606135060039717590702096972930814428759032404269759101709671790756463178143949787623821836792662477247624052842849718333550449622140658955581054081751312471819712726722479962465958577056952080928160441258225609897705262614494607339126216928069521406520619119688243287473394538225119027875465220992256233111477265049726174251028452120761620567236506258269287781320020740354052506311094266116406810709272834304862320539294205143454357131313879679493260017348668942730474494178249137387898297328336833589009038180169681270850774180709517707029996636939683240047817287633101083794404428541740415811916696232677498555197744273877942786661835044988438574758774422356087368185157228627335879058660154558309535912070401295584736621504268847267595223765835863174255756697267818931047523414328918687705134068360361363742640382966108545994545911705825697417989043286767551310728319742954355856116731710961138337957358885918445698641669559694166808074917226884181158917536699176609687522288426691820400183361523559409155799556283862329497478912575261457830579497761228960488413082611130636745385531466634515743840239035698486403517044157039226831085528805370810274043977756176084122952933117637894899009906118591255725255303492783199432613047841255537488113392259699564654048366964907825009036946741350368993216860237824660346368178183476516236016631293185747612693520285606412666148401080833153012602745585750872969103848152851344605317151546396041150523486651715472516090757848631964035419441554251667764234034722117421393132102998968842527073068624998951156916755512381404671428195378673434142765187038589280087599553911407299582781759652177398265112189244631130776935980062283655148992367895151475032666162688096176262281649169171506024644941424855074678761732513983988468070793092275675388024763356241941156378024394000502219343689759498466840264622527907455975633934878799543518206521383037618795439338086429200645002065120039545639315698201147683480515936292743251499063438531296922453863968872815997353125881179686462705170051219974666064694475306164653842558263043808428507798331085671416437696164008096171739721381877119714312306163210350382599226246553966125970240408129674442076735944784179006667645805896851048093638137596670696937010699212957919299380937222250509562807981779341384684146547286314982564181910419531236194060603634063907761401557097370591258981203660079555061603095538604465962028762337280258716255780315038694244061790279947528902264433516193654532433289688740976918528
+1189731495357231765053511589829488667966254004695567218956499277562499181851727204760449442904570461384330567646167443286662555267489487930236325136097654342377232417536489080362029584951246485605740928178136611230674219048500381811805207877203107268812398885808170517032687767579195512604426112969939697309064970421357373593737548189791064578075396520278041564919877710332117871859964923206311175434753221226253534337199304629504137668677812103359730222935610071343425325633562626092674600633358193879055413937592435479934747155496913520748914500847834599706604816899916747713074435514585511372746030946789075371775796999312354227866587803370992862072730331502951338476357350089453460696354521572546926077765383044577075982892200047380230605947983926605074559374288887635146614087580689065065271437207231562037396763728185780908406142166217047877746112568232134313256340568095056911759884246066540728231159508276273778086735741815471986687141421432344475502062691975457742639931301197788106590436213127071090684338861628772228444915189303418963135612389885203608036075349871783050435209372998381734440835020273404521625820382960095748088096587424348978607559613437524195438026532392163371033702927429354975024746264545597290170945602348672367013792302348098432637396409095613884932277251719835310031547998505803752546406866843706502753183166325399209709698038388729144247605351114448647488475730429635692916794001788966968620265007002798266353024717022066273037990476329714600171995445673732316103762568799871343179341500144434361457105461379244904895252415230182712399067436456639767780598951274425173976825259444309519076481099524794546856555816525710213317614010389620491220471110091857573837438278112540147709446027133781874510952001326117006323864207925852079541370644269957126564493435341201207708574988136737425864785839645124060309307041974867276363338370018636105162869283008917743830711050229193144085029688094638483773246680141155923835213247853616763725824680857167751837090780487900840228387283614547346509044804890143691849792564977383927445249156165014494875205013001248617782698812613355440377357151258089863597284198597765215866830359241005748505543689358738031324284465243629136488333487686637331181039189590604124992017972343852392605049057443576119873279945400832860199527936922650062116335246759763699388664096895732875994904427617012292176896143437273923395471742216159840248646356256801083915667206811346470984128630513747606135060039717590702096972930814428759032404269759101709671790756463178143949787623821836792662477247624052842849718333550449622140658955581054081751312471819712726722479962465958577056952080928160441258225609897705262614494607339126216928069521406520619119688243287473394538225119027875465220992256233111477265049726174251028452120761620567236506258269287781320020740354052506311094266116406810709272834304862320539294205143454357131313879679493260017348668942730474494178249137387898297328336833589009038180169681270850774180709517707029996636939683240047817287633101083794404428541740415811916696232677498555197744273877942786661835044988438574758774422356087368185157228627335879058660154558309535912070401295584736621504268847267595223765835863174255756697267818931047523414328918687705134068360361363742640382966108545994545911705825697417989043286767551310728319742954355856116731710961138337957358885918445698641669559694166808074917226884181158917536699176609687522288426691820400183361523559409155799556283862329497478912575261457830579497761228960488413082611130636745385531466634515743840239035698486403517044157039226831085528805370810274043977756176084122952933117637894899009906118591255725255303492783199432613047841255537488113392259699564654048366964907825009036946741350368993216860237824660346368178183476516236016631293185747612693520285606412666148401080833153012602745585750872969103848152851344605317151546396041150523486651715472516090757848631964035419441554251667764234034722117421393132102998968842527073068624998951156916755512381404671428195378673434142765187038589280087599553911407299582781759652177398265112189244631130776935980062283655148992367895151475032666162688096176262281649169171506024644941424855074678761732513983988468070793092275675388024763356241941156378024394000502219343689759498466840264622527907455975633934878799543518206521383037618795439338086429200645002065120039545639315698201147683480515936292743251499063438531296922453863968872815997353125881179686462705170051219974666064694475306164653842558263043808428507798331085671416437696164008096171739721381877119714312306163210350382599226246553966125970240408129674442076735944784179006667645805896851048093638137596670696937010699212957919299380937222250509562807981779341384684146547286314982564181910419531236194060603634063907761401557097370591258981203660079555061603095538604465962028762337280258716255780315038694244061790279947528902264433516193654532433289688740976918528.001
+-1189731495357231765053511589829488667966254004695567218956499277562499181851727204760449442904570461384330567646167443286662555267489487930236325136097654342377232417536489080362029584951246485605740928178136611230674219048500381811805207877203107268812398885808170517032687767579195512604426112969939697309064970421357373593737548189791064578075396520278041564919877710332117871859964923206311175434753221226253534337199304629504137668677812103359730222935610071343425325633562626092674600633358193879055413937592435479934747155496913520748914500847834599706604816899916747713074435514585511372746030946789075371775796999312354227866587803370992862072730331502951338476357350089453460696354521572546926077765383044577075982892200047380230605947983926605074559374288887635146614087580689065065271437207231562037396763728185780908406142166217047877746112568232134313256340568095056911759884246066540728231159508276273778086735741815471986687141421432344475502062691975457742639931301197788106590436213127071090684338861628772228444915189303418963135612389885203608036075349871783050435209372998381734440835020273404521625820382960095748088096587424348978607559613437524195438026532392163371033702927429354975024746264545597290170945602348672367013792302348098432637396409095613884932277251719835310031547998505803752546406866843706502753183166325399209709698038388729144247605351114448647488475730429635692916794001788966968620265007002798266353024717022066273037990476329714600171995445673732316103762568799871343179341500144434361457105461379244904895252415230182712399067436456639767780598951274425173976825259444309519076481099524794546856555816525710213317614010389620491220471110091857573837438278112540147709446027133781874510952001326117006323864207925852079541370644269957126564493435341201207708574988136737425864785839645124060309307041974867276363338370018636105162869283008917743830711050229193144085029688094638483773246680141155923835213247853616763725824680857167751837090780487900840228387283614547346509044804890143691849792564977383927445249156165014494875205013001248617782698812613355440377357151258089863597284198597765215866830359241005748505543689358738031324284465243629136488333487686637331181039189590604124992017972343852392605049057443576119873279945400832860199527936922650062116335246759763699388664096895732875994904427617012292176896143437273923395471742216159840248646356256801083915667206811346470984128630513747606135060039717590702096972930814428759032404269759101709671790756463178143949787623821836792662477247624052842849718333550449622140658955581054081751312471819712726722479962465958577056952080928160441258225609897705262614494607339126216928069521406520619119688243287473394538225119027875465220992256233111477265049726174251028452120761620567236506258269287781320020740354052506311094266116406810709272834304862320539294205143454357131313879679493260017348668942730474494178249137387898297328336833589009038180169681270850774180709517707029996636939683240047817287633101083794404428541740415811916696232677498555197744273877942786661835044988438574758774422356087368185157228627335879058660154558309535912070401295584736621504268847267595223765835863174255756697267818931047523414328918687705134068360361363742640382966108545994545911705825697417989043286767551310728319742954355856116731710961138337957358885918445698641669559694166808074917226884181158917536699176609687522288426691820400183361523559409155799556283862329497478912575261457830579497761228960488413082611130636745385531466634515743840239035698486403517044157039226831085528805370810274043977756176084122952933117637894899009906118591255725255303492783199432613047841255537488113392259699564654048366964907825009036946741350368993216860237824660346368178183476516236016631293185747612693520285606412666148401080833153012602745585750872969103848152851344605317151546396041150523486651715472516090757848631964035419441554251667764234034722117421393132102998968842527073068624998951156916755512381404671428195378673434142765187038589280087599553911407299582781759652177398265112189244631130776935980062283655148992367895151475032666162688096176262281649169171506024644941424855074678761732513983988468070793092275675388024763356241941156378024394000502219343689759498466840264622527907455975633934878799543518206521383037618795439338086429200645002065120039545639315698201147683480515936292743251499063438531296922453863968872815997353125881179686462705170051219974666064694475306164653842558263043808428507798331085671416437696164008096171739721381877119714312306163210350382599226246553966125970240408129674442076735944784179006667645805896851048093638137596670696937010699212957919299380937222250509562807981779341384684146547286314982564181910419531236194060603634063907761401557097370591258981203660079555061603095538604465962028762337280258716255780315038694244061790279947528902264433516193654532433289688740976918527.999
+-1189731495357231765053511589829488667966254004695567218956499277562499181851727204760449442904570461384330567646167443286662555267489487930236325136097654342377232417536489080362029584951246485605740928178136611230674219048500381811805207877203107268812398885808170517032687767579195512604426112969939697309064970421357373593737548189791064578075396520278041564919877710332117871859964923206311175434753221226253534337199304629504137668677812103359730222935610071343425325633562626092674600633358193879055413937592435479934747155496913520748914500847834599706604816899916747713074435514585511372746030946789075371775796999312354227866587803370992862072730331502951338476357350089453460696354521572546926077765383044577075982892200047380230605947983926605074559374288887635146614087580689065065271437207231562037396763728185780908406142166217047877746112568232134313256340568095056911759884246066540728231159508276273778086735741815471986687141421432344475502062691975457742639931301197788106590436213127071090684338861628772228444915189303418963135612389885203608036075349871783050435209372998381734440835020273404521625820382960095748088096587424348978607559613437524195438026532392163371033702927429354975024746264545597290170945602348672367013792302348098432637396409095613884932277251719835310031547998505803752546406866843706502753183166325399209709698038388729144247605351114448647488475730429635692916794001788966968620265007002798266353024717022066273037990476329714600171995445673732316103762568799871343179341500144434361457105461379244904895252415230182712399067436456639767780598951274425173976825259444309519076481099524794546856555816525710213317614010389620491220471110091857573837438278112540147709446027133781874510952001326117006323864207925852079541370644269957126564493435341201207708574988136737425864785839645124060309307041974867276363338370018636105162869283008917743830711050229193144085029688094638483773246680141155923835213247853616763725824680857167751837090780487900840228387283614547346509044804890143691849792564977383927445249156165014494875205013001248617782698812613355440377357151258089863597284198597765215866830359241005748505543689358738031324284465243629136488333487686637331181039189590604124992017972343852392605049057443576119873279945400832860199527936922650062116335246759763699388664096895732875994904427617012292176896143437273923395471742216159840248646356256801083915667206811346470984128630513747606135060039717590702096972930814428759032404269759101709671790756463178143949787623821836792662477247624052842849718333550449622140658955581054081751312471819712726722479962465958577056952080928160441258225609897705262614494607339126216928069521406520619119688243287473394538225119027875465220992256233111477265049726174251028452120761620567236506258269287781320020740354052506311094266116406810709272834304862320539294205143454357131313879679493260017348668942730474494178249137387898297328336833589009038180169681270850774180709517707029996636939683240047817287633101083794404428541740415811916696232677498555197744273877942786661835044988438574758774422356087368185157228627335879058660154558309535912070401295584736621504268847267595223765835863174255756697267818931047523414328918687705134068360361363742640382966108545994545911705825697417989043286767551310728319742954355856116731710961138337957358885918445698641669559694166808074917226884181158917536699176609687522288426691820400183361523559409155799556283862329497478912575261457830579497761228960488413082611130636745385531466634515743840239035698486403517044157039226831085528805370810274043977756176084122952933117637894899009906118591255725255303492783199432613047841255537488113392259699564654048366964907825009036946741350368993216860237824660346368178183476516236016631293185747612693520285606412666148401080833153012602745585750872969103848152851344605317151546396041150523486651715472516090757848631964035419441554251667764234034722117421393132102998968842527073068624998951156916755512381404671428195378673434142765187038589280087599553911407299582781759652177398265112189244631130776935980062283655148992367895151475032666162688096176262281649169171506024644941424855074678761732513983988468070793092275675388024763356241941156378024394000502219343689759498466840264622527907455975633934878799543518206521383037618795439338086429200645002065120039545639315698201147683480515936292743251499063438531296922453863968872815997353125881179686462705170051219974666064694475306164653842558263043808428507798331085671416437696164008096171739721381877119714312306163210350382599226246553966125970240408129674442076735944784179006667645805896851048093638137596670696937010699212957919299380937222250509562807981779341384684146547286314982564181910419531236194060603634063907761401557097370591258981203660079555061603095538604465962028762337280258716255780315038694244061790279947528902264433516193654532433289688740976918528
+-1189731495357231765053511589829488667966254004695567218956499277562499181851727204760449442904570461384330567646167443286662555267489487930236325136097654342377232417536489080362029584951246485605740928178136611230674219048500381811805207877203107268812398885808170517032687767579195512604426112969939697309064970421357373593737548189791064578075396520278041564919877710332117871859964923206311175434753221226253534337199304629504137668677812103359730222935610071343425325633562626092674600633358193879055413937592435479934747155496913520748914500847834599706604816899916747713074435514585511372746030946789075371775796999312354227866587803370992862072730331502951338476357350089453460696354521572546926077765383044577075982892200047380230605947983926605074559374288887635146614087580689065065271437207231562037396763728185780908406142166217047877746112568232134313256340568095056911759884246066540728231159508276273778086735741815471986687141421432344475502062691975457742639931301197788106590436213127071090684338861628772228444915189303418963135612389885203608036075349871783050435209372998381734440835020273404521625820382960095748088096587424348978607559613437524195438026532392163371033702927429354975024746264545597290170945602348672367013792302348098432637396409095613884932277251719835310031547998505803752546406866843706502753183166325399209709698038388729144247605351114448647488475730429635692916794001788966968620265007002798266353024717022066273037990476329714600171995445673732316103762568799871343179341500144434361457105461379244904895252415230182712399067436456639767780598951274425173976825259444309519076481099524794546856555816525710213317614010389620491220471110091857573837438278112540147709446027133781874510952001326117006323864207925852079541370644269957126564493435341201207708574988136737425864785839645124060309307041974867276363338370018636105162869283008917743830711050229193144085029688094638483773246680141155923835213247853616763725824680857167751837090780487900840228387283614547346509044804890143691849792564977383927445249156165014494875205013001248617782698812613355440377357151258089863597284198597765215866830359241005748505543689358738031324284465243629136488333487686637331181039189590604124992017972343852392605049057443576119873279945400832860199527936922650062116335246759763699388664096895732875994904427617012292176896143437273923395471742216159840248646356256801083915667206811346470984128630513747606135060039717590702096972930814428759032404269759101709671790756463178143949787623821836792662477247624052842849718333550449622140658955581054081751312471819712726722479962465958577056952080928160441258225609897705262614494607339126216928069521406520619119688243287473394538225119027875465220992256233111477265049726174251028452120761620567236506258269287781320020740354052506311094266116406810709272834304862320539294205143454357131313879679493260017348668942730474494178249137387898297328336833589009038180169681270850774180709517707029996636939683240047817287633101083794404428541740415811916696232677498555197744273877942786661835044988438574758774422356087368185157228627335879058660154558309535912070401295584736621504268847267595223765835863174255756697267818931047523414328918687705134068360361363742640382966108545994545911705825697417989043286767551310728319742954355856116731710961138337957358885918445698641669559694166808074917226884181158917536699176609687522288426691820400183361523559409155799556283862329497478912575261457830579497761228960488413082611130636745385531466634515743840239035698486403517044157039226831085528805370810274043977756176084122952933117637894899009906118591255725255303492783199432613047841255537488113392259699564654048366964907825009036946741350368993216860237824660346368178183476516236016631293185747612693520285606412666148401080833153012602745585750872969103848152851344605317151546396041150523486651715472516090757848631964035419441554251667764234034722117421393132102998968842527073068624998951156916755512381404671428195378673434142765187038589280087599553911407299582781759652177398265112189244631130776935980062283655148992367895151475032666162688096176262281649169171506024644941424855074678761732513983988468070793092275675388024763356241941156378024394000502219343689759498466840264622527907455975633934878799543518206521383037618795439338086429200645002065120039545639315698201147683480515936292743251499063438531296922453863968872815997353125881179686462705170051219974666064694475306164653842558263043808428507798331085671416437696164008096171739721381877119714312306163210350382599226246553966125970240408129674442076735944784179006667645805896851048093638137596670696937010699212957919299380937222250509562807981779341384684146547286314982564181910419531236194060603634063907761401557097370591258981203660079555061603095538604465962028762337280258716255780315038694244061790279947528902264433516193654532433289688740976918528.001
+1189731495357231765085759326628007073479956869869102141501186852722712468967898039614731304160537056720508735524794218059326466407441245944473611725143413248467166796545513080184004525512467970210316955903084154210995219628561620502745688412979158287475743437748747529021767100495257876251386789060100486382120270573746835428422826338960972409135720437886908785614210084478384078153933033666173528598766851519250363351426064628258395419088471393111667700918729834985086320676654241316634560118019882210119337445330955835919527132875094715720056355846555701747536986251959671182002652387533752686564043006387189322467736998297209841197138514624008092952665297074506030396759964773170346856327642777902149445005909504598179054586496247232351389508014081573398665168934777318775791837135956795815584276253258339396528978452820191499230693717636210145879266988271829694083738038077122921912824291024453524934340394022902439339419069066610906029009607658742583030029946393156561520787087964747197937630779342237465827257153805466210260228188924675519409775662832664987585685048138307557155853256492278248578919164433813909200793462409840728598763947896501274688614908225267667177701366807438669326623433058218213443062408099675370787076912329373870411405571681619566725953239506667420107865842757661716617919733022513948046643510651078865572997073260056512303946747105979292110003450407489924836142530065624248678935670746065899317880622000638073367400369402302158314033221251653687424468051520786824115060818437539740055831113916055471483034808874617739843143938172333284262271469979254217432808855959164876994617775909494325360213896498452140653220161981435472501438614603134083005358006470142761755484855437912983836446436796696188799077203473615780300012474195744483595979884254878292198513051622049258764225807542304782444925923341494613428285320468971377328625604051015673705708956626631746891317417396029708456942140863834024650370695696409569123851257481398138888752582030034869787470552028103940729085803240085987569938856671422005581372166650497556769407574429118602955596567887598719046627586511067969787887833869882951233268645804198215954308918671793783729688211286988794688142675294614947234254538088223560934361145676358046211831627683890340178210365154617001635372653348370422726598857026002477929177288289123739070353691365311645518715750245510770260801141976525982246774038853785442558514521428892111522375063439093517487315386834431958429128019507409290585031131279294212910898440219254009319059392162713475019891930586543895163777707714398600339409818266699397506309660607491889862314049922386749339985169589508248405389966372279472368480994566101598780613797426213113809272341186010030687520020604372850246235750477820866306072249009107891882044221153421572454947459745218327822086016027106392614825047067937041894741980478402880643992102437022027245971074555342753214011193822631471157489050501952568860820401920833804902096485703539056563038766617104309221550246208420803236102663918198532911605896456149452566847699113209434574026975730941194301255893892984954283771852399164279918441721650800291777296251806440774844416950920058440264116651186795378697819243783770608877693892976259074109340205317427395771831523271197915676367134269045536541349377669517895718456625645303642348316558188118515730182101737730372539888936801532474040601312554322979825347707786172180885839980406705981955978435796108903153166067253815216088254644383863063765964591075911345075411534030241991912223282597135304726831878735179556423807036390298160370960490420948364372810759652439684318393869597369898890279242300069046830503059657125858043553373113729594871087942860315948055593344147677932119321424028600190292509664619336217631490498027916950777163752425164438252351468600785554531423979834791445600150108890772427261831495874930509509679414887523661977405914784645916502014777727175798319834059621717421648892845862179131151362279648610789587662840109016397812560123410281881558369684764808427158589621053418154441646967665840185085136102607775409115734963155803833286789583501481573372226195484679719674349562964338708154613401347218002057551149833995233231065737207320566592164688912051242035274499618147339269167576074688060033124924140616954310412384530235227956908301847998406574780144353357884105883387959218296741020722854954100887277304947480547152700263711114665576920925961724019512061174430771918685854961160518537953685957360038825116204970615989239857746870933341859397441672382036764530524729808239765622931171203720639459438906663253650619610229282159290703571350858167568164860431176138378765549296218562697437528856056494473388171789278961444737763604387979003662127798027475934505640301147524790717395857232708656327584954348395562117135230986025734451614751913114005140624270977801178582308406486958461409022442175446835595658183592121309722334474915831657286355138025915434411459395393534709704525536550715391.999
+1189731495357231765085759326628007073479956869869102141501186852722712468967898039614731304160537056720508735524794218059326466407441245944473611725143413248467166796545513080184004525512467970210316955903084154210995219628561620502745688412979158287475743437748747529021767100495257876251386789060100486382120270573746835428422826338960972409135720437886908785614210084478384078153933033666173528598766851519250363351426064628258395419088471393111667700918729834985086320676654241316634560118019882210119337445330955835919527132875094715720056355846555701747536986251959671182002652387533752686564043006387189322467736998297209841197138514624008092952665297074506030396759964773170346856327642777902149445005909504598179054586496247232351389508014081573398665168934777318775791837135956795815584276253258339396528978452820191499230693717636210145879266988271829694083738038077122921912824291024453524934340394022902439339419069066610906029009607658742583030029946393156561520787087964747197937630779342237465827257153805466210260228188924675519409775662832664987585685048138307557155853256492278248578919164433813909200793462409840728598763947896501274688614908225267667177701366807438669326623433058218213443062408099675370787076912329373870411405571681619566725953239506667420107865842757661716617919733022513948046643510651078865572997073260056512303946747105979292110003450407489924836142530065624248678935670746065899317880622000638073367400369402302158314033221251653687424468051520786824115060818437539740055831113916055471483034808874617739843143938172333284262271469979254217432808855959164876994617775909494325360213896498452140653220161981435472501438614603134083005358006470142761755484855437912983836446436796696188799077203473615780300012474195744483595979884254878292198513051622049258764225807542304782444925923341494613428285320468971377328625604051015673705708956626631746891317417396029708456942140863834024650370695696409569123851257481398138888752582030034869787470552028103940729085803240085987569938856671422005581372166650497556769407574429118602955596567887598719046627586511067969787887833869882951233268645804198215954308918671793783729688211286988794688142675294614947234254538088223560934361145676358046211831627683890340178210365154617001635372653348370422726598857026002477929177288289123739070353691365311645518715750245510770260801141976525982246774038853785442558514521428892111522375063439093517487315386834431958429128019507409290585031131279294212910898440219254009319059392162713475019891930586543895163777707714398600339409818266699397506309660607491889862314049922386749339985169589508248405389966372279472368480994566101598780613797426213113809272341186010030687520020604372850246235750477820866306072249009107891882044221153421572454947459745218327822086016027106392614825047067937041894741980478402880643992102437022027245971074555342753214011193822631471157489050501952568860820401920833804902096485703539056563038766617104309221550246208420803236102663918198532911605896456149452566847699113209434574026975730941194301255893892984954283771852399164279918441721650800291777296251806440774844416950920058440264116651186795378697819243783770608877693892976259074109340205317427395771831523271197915676367134269045536541349377669517895718456625645303642348316558188118515730182101737730372539888936801532474040601312554322979825347707786172180885839980406705981955978435796108903153166067253815216088254644383863063765964591075911345075411534030241991912223282597135304726831878735179556423807036390298160370960490420948364372810759652439684318393869597369898890279242300069046830503059657125858043553373113729594871087942860315948055593344147677932119321424028600190292509664619336217631490498027916950777163752425164438252351468600785554531423979834791445600150108890772427261831495874930509509679414887523661977405914784645916502014777727175798319834059621717421648892845862179131151362279648610789587662840109016397812560123410281881558369684764808427158589621053418154441646967665840185085136102607775409115734963155803833286789583501481573372226195484679719674349562964338708154613401347218002057551149833995233231065737207320566592164688912051242035274499618147339269167576074688060033124924140616954310412384530235227956908301847998406574780144353357884105883387959218296741020722854954100887277304947480547152700263711114665576920925961724019512061174430771918685854961160518537953685957360038825116204970615989239857746870933341859397441672382036764530524729808239765622931171203720639459438906663253650619610229282159290703571350858167568164860431176138378765549296218562697437528856056494473388171789278961444737763604387979003662127798027475934505640301147524790717395857232708656327584954348395562117135230986025734451614751913114005140624270977801178582308406486958461409022442175446835595658183592121309722334474915831657286355138025915434411459395393534709704525536550715392
+1189731495357231765085759326628007073479956869869102141501186852722712468967898039614731304160537056720508735524794218059326466407441245944473611725143413248467166796545513080184004525512467970210316955903084154210995219628561620502745688412979158287475743437748747529021767100495257876251386789060100486382120270573746835428422826338960972409135720437886908785614210084478384078153933033666173528598766851519250363351426064628258395419088471393111667700918729834985086320676654241316634560118019882210119337445330955835919527132875094715720056355846555701747536986251959671182002652387533752686564043006387189322467736998297209841197138514624008092952665297074506030396759964773170346856327642777902149445005909504598179054586496247232351389508014081573398665168934777318775791837135956795815584276253258339396528978452820191499230693717636210145879266988271829694083738038077122921912824291024453524934340394022902439339419069066610906029009607658742583030029946393156561520787087964747197937630779342237465827257153805466210260228188924675519409775662832664987585685048138307557155853256492278248578919164433813909200793462409840728598763947896501274688614908225267667177701366807438669326623433058218213443062408099675370787076912329373870411405571681619566725953239506667420107865842757661716617919733022513948046643510651078865572997073260056512303946747105979292110003450407489924836142530065624248678935670746065899317880622000638073367400369402302158314033221251653687424468051520786824115060818437539740055831113916055471483034808874617739843143938172333284262271469979254217432808855959164876994617775909494325360213896498452140653220161981435472501438614603134083005358006470142761755484855437912983836446436796696188799077203473615780300012474195744483595979884254878292198513051622049258764225807542304782444925923341494613428285320468971377328625604051015673705708956626631746891317417396029708456942140863834024650370695696409569123851257481398138888752582030034869787470552028103940729085803240085987569938856671422005581372166650497556769407574429118602955596567887598719046627586511067969787887833869882951233268645804198215954308918671793783729688211286988794688142675294614947234254538088223560934361145676358046211831627683890340178210365154617001635372653348370422726598857026002477929177288289123739070353691365311645518715750245510770260801141976525982246774038853785442558514521428892111522375063439093517487315386834431958429128019507409290585031131279294212910898440219254009319059392162713475019891930586543895163777707714398600339409818266699397506309660607491889862314049922386749339985169589508248405389966372279472368480994566101598780613797426213113809272341186010030687520020604372850246235750477820866306072249009107891882044221153421572454947459745218327822086016027106392614825047067937041894741980478402880643992102437022027245971074555342753214011193822631471157489050501952568860820401920833804902096485703539056563038766617104309221550246208420803236102663918198532911605896456149452566847699113209434574026975730941194301255893892984954283771852399164279918441721650800291777296251806440774844416950920058440264116651186795378697819243783770608877693892976259074109340205317427395771831523271197915676367134269045536541349377669517895718456625645303642348316558188118515730182101737730372539888936801532474040601312554322979825347707786172180885839980406705981955978435796108903153166067253815216088254644383863063765964591075911345075411534030241991912223282597135304726831878735179556423807036390298160370960490420948364372810759652439684318393869597369898890279242300069046830503059657125858043553373113729594871087942860315948055593344147677932119321424028600190292509664619336217631490498027916950777163752425164438252351468600785554531423979834791445600150108890772427261831495874930509509679414887523661977405914784645916502014777727175798319834059621717421648892845862179131151362279648610789587662840109016397812560123410281881558369684764808427158589621053418154441646967665840185085136102607775409115734963155803833286789583501481573372226195484679719674349562964338708154613401347218002057551149833995233231065737207320566592164688912051242035274499618147339269167576074688060033124924140616954310412384530235227956908301847998406574780144353357884105883387959218296741020722854954100887277304947480547152700263711114665576920925961724019512061174430771918685854961160518537953685957360038825116204970615989239857746870933341859397441672382036764530524729808239765622931171203720639459438906663253650619610229282159290703571350858167568164860431176138378765549296218562697437528856056494473388171789278961444737763604387979003662127798027475934505640301147524790717395857232708656327584954348395562117135230986025734451614751913114005140624270977801178582308406486958461409022442175446835595658183592121309722334474915831657286355138025915434411459395393534709704525536550715392.001
+-1189731495357231765085759326628007073479956869869102141501186852722712468967898039614731304160537056720508735524794218059326466407441245944473611725143413248467166796545513080184004525512467970210316955903084154210995219628561620502745688412979158287475743437748747529021767100495257876251386789060100486382120270573746835428422826338960972409135720437886908785614210084478384078153933033666173528598766851519250363351426064628258395419088471393111667700918729834985086320676654241316634560118019882210119337445330955835919527132875094715720056355846555701747536986251959671182002652387533752686564043006387189322467736998297209841197138514624008092952665297074506030396759964773170346856327642777902149445005909504598179054586496247232351389508014081573398665168934777318775791837135956795815584276253258339396528978452820191499230693717636210145879266988271829694083738038077122921912824291024453524934340394022902439339419069066610906029009607658742583030029946393156561520787087964747197937630779342237465827257153805466210260228188924675519409775662832664987585685048138307557155853256492278248578919164433813909200793462409840728598763947896501274688614908225267667177701366807438669326623433058218213443062408099675370787076912329373870411405571681619566725953239506667420107865842757661716617919733022513948046643510651078865572997073260056512303946747105979292110003450407489924836142530065624248678935670746065899317880622000638073367400369402302158314033221251653687424468051520786824115060818437539740055831113916055471483034808874617739843143938172333284262271469979254217432808855959164876994617775909494325360213896498452140653220161981435472501438614603134083005358006470142761755484855437912983836446436796696188799077203473615780300012474195744483595979884254878292198513051622049258764225807542304782444925923341494613428285320468971377328625604051015673705708956626631746891317417396029708456942140863834024650370695696409569123851257481398138888752582030034869787470552028103940729085803240085987569938856671422005581372166650497556769407574429118602955596567887598719046627586511067969787887833869882951233268645804198215954308918671793783729688211286988794688142675294614947234254538088223560934361145676358046211831627683890340178210365154617001635372653348370422726598857026002477929177288289123739070353691365311645518715750245510770260801141976525982246774038853785442558514521428892111522375063439093517487315386834431958429128019507409290585031131279294212910898440219254009319059392162713475019891930586543895163777707714398600339409818266699397506309660607491889862314049922386749339985169589508248405389966372279472368480994566101598780613797426213113809272341186010030687520020604372850246235750477820866306072249009107891882044221153421572454947459745218327822086016027106392614825047067937041894741980478402880643992102437022027245971074555342753214011193822631471157489050501952568860820401920833804902096485703539056563038766617104309221550246208420803236102663918198532911605896456149452566847699113209434574026975730941194301255893892984954283771852399164279918441721650800291777296251806440774844416950920058440264116651186795378697819243783770608877693892976259074109340205317427395771831523271197915676367134269045536541349377669517895718456625645303642348316558188118515730182101737730372539888936801532474040601312554322979825347707786172180885839980406705981955978435796108903153166067253815216088254644383863063765964591075911345075411534030241991912223282597135304726831878735179556423807036390298160370960490420948364372810759652439684318393869597369898890279242300069046830503059657125858043553373113729594871087942860315948055593344147677932119321424028600190292509664619336217631490498027916950777163752425164438252351468600785554531423979834791445600150108890772427261831495874930509509679414887523661977405914784645916502014777727175798319834059621717421648892845862179131151362279648610789587662840109016397812560123410281881558369684764808427158589621053418154441646967665840185085136102607775409115734963155803833286789583501481573372226195484679719674349562964338708154613401347218002057551149833995233231065737207320566592164688912051242035274499618147339269167576074688060033124924140616954310412384530235227956908301847998406574780144353357884105883387959218296741020722854954100887277304947480547152700263711114665576920925961724019512061174430771918685854961160518537953685957360038825116204970615989239857746870933341859397441672382036764530524729808239765622931171203720639459438906663253650619610229282159290703571350858167568164860431176138378765549296218562697437528856056494473388171789278961444737763604387979003662127798027475934505640301147524790717395857232708656327584954348395562117135230986025734451614751913114005140624270977801178582308406486958461409022442175446835595658183592121309722334474915831657286355138025915434411459395393534709704525536550715391.999
+-1189731495357231765085759326628007073479956869869102141501186852722712468967898039614731304160537056720508735524794218059326466407441245944473611725143413248467166796545513080184004525512467970210316955903084154210995219628561620502745688412979158287475743437748747529021767100495257876251386789060100486382120270573746835428422826338960972409135720437886908785614210084478384078153933033666173528598766851519250363351426064628258395419088471393111667700918729834985086320676654241316634560118019882210119337445330955835919527132875094715720056355846555701747536986251959671182002652387533752686564043006387189322467736998297209841197138514624008092952665297074506030396759964773170346856327642777902149445005909504598179054586496247232351389508014081573398665168934777318775791837135956795815584276253258339396528978452820191499230693717636210145879266988271829694083738038077122921912824291024453524934340394022902439339419069066610906029009607658742583030029946393156561520787087964747197937630779342237465827257153805466210260228188924675519409775662832664987585685048138307557155853256492278248578919164433813909200793462409840728598763947896501274688614908225267667177701366807438669326623433058218213443062408099675370787076912329373870411405571681619566725953239506667420107865842757661716617919733022513948046643510651078865572997073260056512303946747105979292110003450407489924836142530065624248678935670746065899317880622000638073367400369402302158314033221251653687424468051520786824115060818437539740055831113916055471483034808874617739843143938172333284262271469979254217432808855959164876994617775909494325360213896498452140653220161981435472501438614603134083005358006470142761755484855437912983836446436796696188799077203473615780300012474195744483595979884254878292198513051622049258764225807542304782444925923341494613428285320468971377328625604051015673705708956626631746891317417396029708456942140863834024650370695696409569123851257481398138888752582030034869787470552028103940729085803240085987569938856671422005581372166650497556769407574429118602955596567887598719046627586511067969787887833869882951233268645804198215954308918671793783729688211286988794688142675294614947234254538088223560934361145676358046211831627683890340178210365154617001635372653348370422726598857026002477929177288289123739070353691365311645518715750245510770260801141976525982246774038853785442558514521428892111522375063439093517487315386834431958429128019507409290585031131279294212910898440219254009319059392162713475019891930586543895163777707714398600339409818266699397506309660607491889862314049922386749339985169589508248405389966372279472368480994566101598780613797426213113809272341186010030687520020604372850246235750477820866306072249009107891882044221153421572454947459745218327822086016027106392614825047067937041894741980478402880643992102437022027245971074555342753214011193822631471157489050501952568860820401920833804902096485703539056563038766617104309221550246208420803236102663918198532911605896456149452566847699113209434574026975730941194301255893892984954283771852399164279918441721650800291777296251806440774844416950920058440264116651186795378697819243783770608877693892976259074109340205317427395771831523271197915676367134269045536541349377669517895718456625645303642348316558188118515730182101737730372539888936801532474040601312554322979825347707786172180885839980406705981955978435796108903153166067253815216088254644383863063765964591075911345075411534030241991912223282597135304726831878735179556423807036390298160370960490420948364372810759652439684318393869597369898890279242300069046830503059657125858043553373113729594871087942860315948055593344147677932119321424028600190292509664619336217631490498027916950777163752425164438252351468600785554531423979834791445600150108890772427261831495874930509509679414887523661977405914784645916502014777727175798319834059621717421648892845862179131151362279648610789587662840109016397812560123410281881558369684764808427158589621053418154441646967665840185085136102607775409115734963155803833286789583501481573372226195484679719674349562964338708154613401347218002057551149833995233231065737207320566592164688912051242035274499618147339269167576074688060033124924140616954310412384530235227956908301847998406574780144353357884105883387959218296741020722854954100887277304947480547152700263711114665576920925961724019512061174430771918685854961160518537953685957360038825116204970615989239857746870933341859397441672382036764530524729808239765622931171203720639459438906663253650619610229282159290703571350858167568164860431176138378765549296218562697437528856056494473388171789278961444737763604387979003662127798027475934505640301147524790717395857232708656327584954348395562117135230986025734451614751913114005140624270977801178582308406486958461409022442175446835595658183592121309722334474915831657286355138025915434411459395393534709704525536550715392
+-1189731495357231765085759326628007073479956869869102141501186852722712468967898039614731304160537056720508735524794218059326466407441245944473611725143413248467166796545513080184004525512467970210316955903084154210995219628561620502745688412979158287475743437748747529021767100495257876251386789060100486382120270573746835428422826338960972409135720437886908785614210084478384078153933033666173528598766851519250363351426064628258395419088471393111667700918729834985086320676654241316634560118019882210119337445330955835919527132875094715720056355846555701747536986251959671182002652387533752686564043006387189322467736998297209841197138514624008092952665297074506030396759964773170346856327642777902149445005909504598179054586496247232351389508014081573398665168934777318775791837135956795815584276253258339396528978452820191499230693717636210145879266988271829694083738038077122921912824291024453524934340394022902439339419069066610906029009607658742583030029946393156561520787087964747197937630779342237465827257153805466210260228188924675519409775662832664987585685048138307557155853256492278248578919164433813909200793462409840728598763947896501274688614908225267667177701366807438669326623433058218213443062408099675370787076912329373870411405571681619566725953239506667420107865842757661716617919733022513948046643510651078865572997073260056512303946747105979292110003450407489924836142530065624248678935670746065899317880622000638073367400369402302158314033221251653687424468051520786824115060818437539740055831113916055471483034808874617739843143938172333284262271469979254217432808855959164876994617775909494325360213896498452140653220161981435472501438614603134083005358006470142761755484855437912983836446436796696188799077203473615780300012474195744483595979884254878292198513051622049258764225807542304782444925923341494613428285320468971377328625604051015673705708956626631746891317417396029708456942140863834024650370695696409569123851257481398138888752582030034869787470552028103940729085803240085987569938856671422005581372166650497556769407574429118602955596567887598719046627586511067969787887833869882951233268645804198215954308918671793783729688211286988794688142675294614947234254538088223560934361145676358046211831627683890340178210365154617001635372653348370422726598857026002477929177288289123739070353691365311645518715750245510770260801141976525982246774038853785442558514521428892111522375063439093517487315386834431958429128019507409290585031131279294212910898440219254009319059392162713475019891930586543895163777707714398600339409818266699397506309660607491889862314049922386749339985169589508248405389966372279472368480994566101598780613797426213113809272341186010030687520020604372850246235750477820866306072249009107891882044221153421572454947459745218327822086016027106392614825047067937041894741980478402880643992102437022027245971074555342753214011193822631471157489050501952568860820401920833804902096485703539056563038766617104309221550246208420803236102663918198532911605896456149452566847699113209434574026975730941194301255893892984954283771852399164279918441721650800291777296251806440774844416950920058440264116651186795378697819243783770608877693892976259074109340205317427395771831523271197915676367134269045536541349377669517895718456625645303642348316558188118515730182101737730372539888936801532474040601312554322979825347707786172180885839980406705981955978435796108903153166067253815216088254644383863063765964591075911345075411534030241991912223282597135304726831878735179556423807036390298160370960490420948364372810759652439684318393869597369898890279242300069046830503059657125858043553373113729594871087942860315948055593344147677932119321424028600190292509664619336217631490498027916950777163752425164438252351468600785554531423979834791445600150108890772427261831495874930509509679414887523661977405914784645916502014777727175798319834059621717421648892845862179131151362279648610789587662840109016397812560123410281881558369684764808427158589621053418154441646967665840185085136102607775409115734963155803833286789583501481573372226195484679719674349562964338708154613401347218002057551149833995233231065737207320566592164688912051242035274499618147339269167576074688060033124924140616954310412384530235227956908301847998406574780144353357884105883387959218296741020722854954100887277304947480547152700263711114665576920925961724019512061174430771918685854961160518537953685957360038825116204970615989239857746870933341859397441672382036764530524729808239765622931171203720639459438906663253650619610229282159290703571350858167568164860431176138378765549296218562697437528856056494473388171789278961444737763604387979003662127798027475934505640301147524790717395857232708656327584954348395562117135230986025734451614751913114005140624270977801178582308406486958461409022442175446835595658183592121309722334474915831657286355138025915434411459395393534709704525536550715392.001
+2.10194769648722560638559437493487419692039291281477365763560242583468662402879090222995728254318237304687499e-45
+2.101947696487225606385594374934874196920392912814773657635602425834686624028790902229957282543182373046875e-45
+2.10194769648722560638559437493487419692039291281477365763560242583468662402879090222995728254318237304687501e-45
+-2.10194769648722560638559437493487419692039291281477365763560242583468662402879090222995728254318237304687499e-45
+-2.101947696487225606385594374934874196920392912814773657635602425834686624028790902229957282543182373046875e-45
+-2.10194769648722560638559437493487419692039291281477365763560242583468662402879090222995728254318237304687501e-45
+3.50324616081204267730932395822479032820065485469128942939267070972447770671465150371659547090530395507812499e-45
+3.503246160812042677309323958224790328200654854691289429392670709724477706714651503716595470905303955078125e-45
+3.50324616081204267730932395822479032820065485469128942939267070972447770671465150371659547090530395507812501e-45
+-3.50324616081204267730932395822479032820065485469128942939267070972447770671465150371659547090530395507812499e-45
+-3.503246160812042677309323958224790328200654854691289429392670709724477706714651503716595470905303955078125e-45
+-3.50324616081204267730932395822479032820065485469128942939267070972447770671465150371659547090530395507812501e-45
+7.410984687618698162648531893023320585475897039214871466383785237510132609053131277979497545424539885696948470431685765963899850655339096945981621940161728171894510697854671067917687257517734731555330779540854980960845750095811137303474765809687100959097544227100475730780971111893578483867565399878350301522805593404659373979179073872386829939581848166016912201945649993128979841136206248449867871357218035220901702390328579173252022052897402080290685402160661237554998340267130003581248647904138574340187552090159017259254714629617513415977493871857473787096164563890871811984127167305601704549300470526959016576377688490826798697257336652176556794107250876433756084600398490497214911746308553955635418864151316847843631308023759629577398300170898437499e-324
+7.4109846876186981626485318930233205854758970392148714663837852375101326090531312779794975454245398856969484704316857659638998506553390969459816219401617281718945106978546710679176872575177347315553307795408549809608457500958111373034747658096871009590975442271004757307809711118935784838675653998783503015228055934046593739791790738723868299395818481660169122019456499931289798411362062484498678713572180352209017023903285791732520220528974020802906854021606612375549983402671300035812486479041385743401875520901590172592547146296175134159774938718574737870961645638908718119841271673056017045493004705269590165763776884908267986972573366521765567941072508764337560846003984904972149117463085539556354188641513168478436313080237596295773983001708984375e-324
+7.410984687618698162648531893023320585475897039214871466383785237510132609053131277979497545424539885696948470431685765963899850655339096945981621940161728171894510697854671067917687257517734731555330779540854980960845750095811137303474765809687100959097544227100475730780971111893578483867565399878350301522805593404659373979179073872386829939581848166016912201945649993128979841136206248449867871357218035220901702390328579173252022052897402080290685402160661237554998340267130003581248647904138574340187552090159017259254714629617513415977493871857473787096164563890871811984127167305601704549300470526959016576377688490826798697257336652176556794107250876433756084600398490497214911746308553955635418864151316847843631308023759629577398300170898437501e-324
+-7.410984687618698162648531893023320585475897039214871466383785237510132609053131277979497545424539885696948470431685765963899850655339096945981621940161728171894510697854671067917687257517734731555330779540854980960845750095811137303474765809687100959097544227100475730780971111893578483867565399878350301522805593404659373979179073872386829939581848166016912201945649993128979841136206248449867871357218035220901702390328579173252022052897402080290685402160661237554998340267130003581248647904138574340187552090159017259254714629617513415977493871857473787096164563890871811984127167305601704549300470526959016576377688490826798697257336652176556794107250876433756084600398490497214911746308553955635418864151316847843631308023759629577398300170898437499e-324
+-7.4109846876186981626485318930233205854758970392148714663837852375101326090531312779794975454245398856969484704316857659638998506553390969459816219401617281718945106978546710679176872575177347315553307795408549809608457500958111373034747658096871009590975442271004757307809711118935784838675653998783503015228055934046593739791790738723868299395818481660169122019456499931289798411362062484498678713572180352209017023903285791732520220528974020802906854021606612375549983402671300035812486479041385743401875520901590172592547146296175134159774938718574737870961645638908718119841271673056017045493004705269590165763776884908267986972573366521765567941072508764337560846003984904972149117463085539556354188641513168478436313080237596295773983001708984375e-324
+-7.410984687618698162648531893023320585475897039214871466383785237510132609053131277979497545424539885696948470431685765963899850655339096945981621940161728171894510697854671067917687257517734731555330779540854980960845750095811137303474765809687100959097544227100475730780971111893578483867565399878350301522805593404659373979179073872386829939581848166016912201945649993128979841136206248449867871357218035220901702390328579173252022052897402080290685402160661237554998340267130003581248647904138574340187552090159017259254714629617513415977493871857473787096164563890871811984127167305601704549300470526959016576377688490826798697257336652176556794107250876433756084600398490497214911746308553955635418864151316847843631308023759629577398300170898437501e-324
+5.4677992978237119037926089004291297245985762235403450155814707305425575329500966052143410629387408077958710210208052966529504784489330482549602621133847135082257338717668975178538378957084503396349323438489751160934104796903302909028868611999312592165232778075745690821530731336739429587895774023213939331012985331912661021188896306095323395084578542200319963179359407180003251440084380484161504585462684082946932782829488183829817567452314437076943950532707791252404699268678810198502871250235796855577909830559749628817599194837522029036891995648803056846354520653635957919882905363521007017169741463296044392266269433408052686419017699718627761948763856040592690841721239300491445991666051031755802326720329666454066568630314348735511753639418257984253319063825247065727664852328745422305642626091617823968872438962470092440688372515677832232712866924800106797113478024083516199991991274936894113006233377518471389394984262004503058455485659100090665241525454803628182902241401701783637353179296850056973639305945938813428953287892593620291195986011128990061888798763718548789025717537674780281005583347165047846045925077914824515331335131286063574407181821236377907693209224423490663289916878620725507793163931390372011875799729330162278748985052557432333005334989519381566364065326138465761456173231416844807264090741841972247545424908843928136253653308813487994328446248389608261444391573619177442907290731163188581917588219420107047265367485141413919810885909689112244064797106324295291545892937991321479061743491490060940946128274533657682130125169586930571899403551122506297763180795732325134340989331155893724289358918212707392997768032299997207208451112971425779939507837165263255764268971211819536322993221774123134726665579460265871378186589562858761835613344584269098062275786969729830545786485401407774313414954958161677096004701941411411592755485864471870515173326244464631295701572087440183178339987662926763241220698078822661709054601073523477544653542795020468256078409306409100874886828781860529824879343987945751252081314345990313550683792348814627862441324030155730592166581251009922787324590431548734575328663628650380722603024383412564651446272117561042207738413114131099731016728935023152239431311619533848376583687509108453086730196255111695352464186678221927564757730319825223049341618853631333478241227227268084583396688436229936266854011427192767039363517491659523133852472534104124441112346615696891097070121463652258681270378076538381697594264658479637863087159293838880752928175545408262813403793568695416998388572304528748824756265665683890518422696169422338806137532304784682662448207928681740476188343739117833525916386815135793034906806117413105008719197882837614738262050320291539494104952056471606645482046176634075459021552555959590354956262127809953013679512507451424271839221946794056861055980558363033732905772356986051180966474116423192194741572438649215204229781279620370445373851348786918527399785630808242657122705381806661616271132182017797793661244078445747547535623384548769818529655539279036503234072455810991588075181817695975173110136482659854557506203058080551018873203138260451109855100526720073566126209666125604482413705611996796777927332827103568863352291499261312290355143742018042254470707107847293593205234049774839191754781030496978091006099559675240966730110167624903610656473267105556155633783594089546261107653110531808279445757724399186120387548675148632176049190701680305210224388072261974806791922636412897526952793677946622674149577084803568051242934076450942927092705684547042915490323112457971853658760725588190377666477106903106693847278847646032201293023329503348730723947218797410452333910847913892827195814551858335519518939031446093385329182820714173657946661746005901866885589732922652604573972842197231187365263381958925227970038358064987248233271706462687651143350472018043321314534759819524203308490914358596886150053406629512434788155355109100540319857813535695923273426256911552977539394209918630668466632881929661971212772444625151371953428875491139683919687008724010475217255347915698820960215217257390308560235323463096946442080548018754166369706161589705215873687166365628787796501470056870127729464714362172216802441045276911597009443281135389729130222603185665646434661947627628077723219376892727386120519287577405410510114936151502752997122750262781911372625997223415283516995479265631485799456782561734766648462849641064097181818204279498552827825384186202065516999362573388136163077477126602169410435905014077049808497409025369325795765272066650278004200357878990911374982857977108488482528354406313893864211497105765030504600982253488805474531798742143374465080240030582370086699167937651038307909706139327119325418854546478285735654541635477790346964782617354265050767878335230272194896680141986745074630225893106573559558843545841186025169531604151588481389164948914823593944287133336263680358191369540321930649824471425485137777984823525402115151171093313613251350685343824859052220126891551966018355920872775724807128769003243129486808733796350497668255116485157191011858830643898323628223472099280243583164434348347014910398004439821970508280440872759395827943270985008769143562351938091476215083548164137333541883808870019116234099013452929807950151652297436436006149684939775781234660954156154478642694176038524277810483833149798681345708089152179193979463169402340611793486272301808073267534612685593859596787866884211031341417903391749825320454663508370385251831778477311017089729361152161928815389818579983544490982891734081131312309744330960666031291451740885503458543884956367654943799264600314531815427932691107874782328654759293575803481929361961781073958502075438499070633193799699311694287183299423475339817655608058724723221867087563064557636112380829514501382073257737022472866608244164310385205213523702910787182472517125030106491031844871593141759729773907719510044049352857426592936763727969496103940591601975078602859660478614119405428212830134490731706220583788265344728818766885126977588151111984290444321648931907188080336064713873288834096229203276676119810521851726133377700616341304257822975788967472152742255041912584197045423031298506219011800240120182445838590696647416285334515631019799007515682004250060857020904012215375170479800482680554499806010766109655061507421747722461180617361402575082294678925605271083587897845390768226405648508518103525778638618195775128516073959272990148239415346263486966573934577450787243667063244378381883115827207605856174876350045086885320626669331311880593775916269643646395423220549940790476989709243027420158390806135690975149384714684219964938182719962913931464979458639185519531490009437619838306362365453754807654884704163490469296444427144778593725687358437087390151990694667516279202024332494828210657618261952038597230263799412584275851667403910657370879707181053365818502680037431560091209982641738995652793235851569372314130107647166085235615697257094269133100914135783178856280392139325001352841718610484616627448189556913621837791650699820323059708766420810133584841826718631681683381743511974264126250984214812397119978273917903889865891718836792263377888052458189238746074986456016681098722869419588274020181430652732817858728473849369539367463917171317324882099804999043054467247785592038464723442276239896066431580123756428540074945472427752568981171400621705853374875885943072600692576914790467205905272372594740187988081900317493185005142913607163380720069786786782095331840893694073778325119471833528492917081008547303414509381563617864195257751546539575461435803625993888325647883541039192368366987400263049681218831477776345118518503709588840859023379762456561030683928115349942393963185677123055324771693784214924931737043793679546051454845624150270955450608318747395755728950832754611277041359602301205138509175543313522772786504141007552691902249572375175731740923618769197304652898352694386665448260033458575323252814233868098279476166764258284911434288072243178941698347365985427696983129579496059032032841281149923518087084876885114369033227736521245740554711771423492719899982357711910225545480424688322195336240492253136281857837808491795993788199125205555222116581071134476787468430539307909617442106685159519071053844987343666452494280317720153567054364117244775141336558406098548803924509496052261825198043140272655303625315605326569530252885854991822289219201218313590745412010446642247111703901991591338062693320157180618736569439969283245279430312651192668788340033626825194260296262959884258597703584888770801961209652822982322376122303586169861685106043820510444293432856251210395693261264867823980172683352796141772210301725997652373804152525037162852291403804455997331367378463632437773242905518075065414724295857460288225400061608664961649196400079359622673770607898395269075056596627116148289491042491764170924014885106158235482774778418134123293974436877051995673618683751115353808771434984204447736174758316063096245047311279841579995578186609402864244042751443128536278453430633423118662852688374229600894418958824842459450540826176452145829389286103522774101195556029650753254244433565937938526828990893149766298997738359913887178888607190765709867052470880785937935110091424743449966353497865681753841380246075612094033617488674676296822570077027076266879557913673839341012099558043806442348798053951239274913334631522409564461770434875790402230022872647568436177018658068697071731879399180374560963492726714528729224208938589940272515747888379118461617702271694075087419634147298076764775745707026934442908236664400557265527951453482191684597674273691978253678690951178777239573925410438679099374700609973920128201422381329108236575369403675960765238333778127017096574296148321075566959285042221837159799800133563239963969638610872680393210300180152020613051613414547163713772512617757277955979895866367571776456268564191092477027650135832200376440239783726540552694851717269598489288851529660975027775639565229734596726205832668434979354541943345062977891187146561050118118108223323735210843681128615413601091222007912350536959777114306541514511332368936078560929788143798814391221507522370648646767364209132147312407014953113532379838195728491128536978285918066991040993153064356179903885952027952713749653604502053512355449916680887234238773855581636172479594866871765094513940103284167914110196720261110812716776424260154507395050380575452850420730818412994731079307343538376880280124019321040198038723558784544408584344466090982802067326529000931562048932875469079874956595180595395347093285140279165467965596318365749701535812384333240968283640721344003442002691613772056762099098025739332715913970186225176459563484134139746647940170537900275350480490468851439300771949915194703080576611022590670399844931867609777417528903454731922206378932141464755402629420074293816349270038351339419146768473851353171629153912238797141905920143036064131705230421762305232861503856799511155936565169005916711845389135580928162511912438531204156138447775120789548666143600293412065767167106888509172568003530668539460588248316513392652567856224602697296203328920073354425994044956624831346979458846837597950064151867164583749203433942592178528868981311575331848941597492470436782387502687532649093096498315347403977436001399982102030846763698994785054617523241463186980898394504211430763617825306895065661536045431497903759118007934839122881885863091769469883539876840543521295706315919855784493235603866268925981702690270202829595794350800918257913991744455922683343374046671669930219650268554687499e-4951
+5.46779929782371190379260890042912972459857622354034501558147073054255753295009660521434106293874080779587102102080529665295047844893304825496026211338471350822573387176689751785383789570845033963493234384897511609341047969033029090288686119993125921652327780757456908215307313367394295878957740232139393310129853319126610211888963060953233950845785422003199631793594071800032514400843804841615045854626840829469327828294881838298175674523144370769439505327077912524046992686788101985028712502357968555779098305597496288175991948375220290368919956488030568463545206536359579198829053635210070171697414632960443922662694334080526864190176997186277619487638560405926908417212393004914459916660510317558023267203296664540665686303143487355117536394182579842533190638252470657276648523287454223056426260916178239688724389624700924406883725156778322327128669248001067971134780240835161999919912749368941130062333775184713893949842620045030584554856591000906652415254548036281829022414017017836373531792968500569736393059459388134289532878925936202911959860111289900618887987637185487890257175376747802810055833471650478460459250779148245153313351312860635744071818212363779076932092244234906632899168786207255077931639313903720118757997293301622787489850525574323330053349895193815663640653261384657614561732314168448072640907418419722475454249088439281362536533088134879943284462483896082614443915736191774429072907311631885819175882194201070472653674851414139198108859096891122440647971063242952915458929379913214790617434914900609409461282745336576821301251695869305718994035511225062977631807957323251343409893311558937242893589182127073929977680322999972072084511129714257799395078371652632557642689712118195363229932217741231347266655794602658713781865895628587618356133445842690980622757869697298305457864854014077743134149549581616770960047019414114115927554858644718705151733262444646312957015720874401831783399876629267632412206980788226617090546010735234775446535427950204682560784093064091008748868287818605298248793439879457512520813143459903135506837923488146278624413240301557305921665812510099227873245904315487345753286636286503807226030243834125646514462721175610422077384131141310997310167289350231522394313116195338483765836875091084530867301962551116953524641866782219275647577303198252230493416188536313334782412272272680845833966884362299362668540114271927670393635174916595231338524725341041244411123466156968910970701214636522586812703780765383816975942646584796378630871592938388807529281755454082628134037935686954169983885723045287488247562656656838905184226961694223388061375323047846826624482079286817404761883437391178335259163868151357930349068061174131050087191978828376147382620503202915394941049520564716066454820461766340754590215525559595903549562621278099530136795125074514242718392219467940568610559805583630337329057723569860511809664741164231921947415724386492152042297812796203704453738513487869185273997856308082426571227053818066616162711321820177977936612440784457475475356233845487698185296555392790365032340724558109915880751818176959751731101364826598545575062030580805510188732031382604511098551005267200735661262096661256044824137056119967967779273328271035688633522914992613122903551437420180422544707071078472935932052340497748391917547810304969780910060995596752409667301101676249036106564732671055561556337835940895462611076531105318082794457577243991861203875486751486321760491907016803052102243880722619748067919226364128975269527936779466226741495770848035680512429340764509429270927056845470429154903231124579718536587607255881903776664771069031066938472788476460322012930233295033487307239472187974104523339108479138928271958145518583355195189390314460933853291828207141736579466617460059018668855897329226526045739728421972311873652633819589252279700383580649872482332717064626876511433504720180433213145347598195242033084909143585968861500534066295124347881553551091005403198578135356959232734262569115529775393942099186306684666328819296619712127724446251513719534288754911396839196870087240104752172553479156988209602152172573903085602353234630969464420805480187541663697061615897052158736871663656287877965014700568701277294647143621722168024410452769115970094432811353897291302226031856656464346619476276280777232193768927273861205192875774054105101149361515027529971227502627819113726259972234152835169954792656314857994567825617347666484628496410640971818182042794985528278253841862020655169993625733881361630774771266021694104359050140770498084974090253693257957652720666502780042003578789909113749828579771084884825283544063138938642114971057650305046009822534888054745317987421433744650802400305823700866991679376510383079097061393271193254188545464782857356545416354777903469647826173542650507678783352302721948966801419867450746302258931065735595588435458411860251695316041515884813891649489148235939442871333362636803581913695403219306498244714254851377779848235254021151511710933136132513506853438248590522201268915519660183559208727757248071287690032431294868087337963504976682551164851571910118588306438983236282234720992802435831644343483470149103980044398219705082804408727593958279432709850087691435623519380914762150835481641373335418838088700191162340990134529298079501516522974364360061496849397757812346609541561544786426941760385242778104838331497986813457080891521791939794631694023406117934862723018080732675346126855938595967878668842110313414179033917498253204546635083703852518317784773110170897293611521619288153898185799835444909828917340811313123097443309606660312914517408855034585438849563676549437992646003145318154279326911078747823286547592935758034819293619617810739585020754384990706331937996993116942871832994234753398176556080587247232218670875630645576361123808295145013820732577370224728666082441643103852052135237029107871824725171250301064910318448715931417597297739077195100440493528574265929367637279694961039405916019750786028596604786141194054282128301344907317062205837882653447288187668851269775881511119842904443216489319071880803360647138732888340962292032766761198105218517261333777006163413042578229757889674721527422550419125841970454230312985062190118002401201824458385906966474162853345156310197990075156820042500608570209040122153751704798004826805544998060107661096550615074217477224611806173614025750822946789256052710835878978453907682264056485085181035257786386181957751285160739592729901482394153462634869665739345774507872436670632443783818831158272076058561748763500450868853206266693313118805937759162696436463954232205499407904769897092430274201583908061356909751493847146842199649381827199629139314649794586391855195314900094376198383063623654537548076548847041634904692964444271447785937256873584370873901519906946675162792020243324948282106576182619520385972302637994125842758516674039106573708797071810533658185026800374315600912099826417389956527932358515693723141301076471660852356156972570942691331009141357831788562803921393250013528417186104846166274481895569136218377916506998203230597087664208101335848418267186316816833817435119742641262509842148123971199782739179038898658917188367922633778880524581892387460749864560166810987228694195882740201814306527328178587284738493695393674639171713173248820998049990430544672477855920384647234422762398960664315801237564285400749454724277525689811714006217058533748758859430726006925769147904672059052723725947401879880819003174931850051429136071633807200697867867820953318408936940737783251194718335284929170810085473034145093815636178641952577515465395754614358036259938883256478835410391923683669874002630496812188314777763451185185037095888408590233797624565610306839281153499423939631856771230553247716937842149249317370437936795460514548456241502709554506083187473957557289508327546112770413596023012051385091755433135227727865041410075526919022495723751757317409236187691973046528983526943866654482600334585753232528142338680982794761667642582849114342880722431789416983473659854276969831295794960590320328412811499235180870848768851143690332277365212457405547117714234927198999823577119102255454804246883221953362404922531362818578378084917959937881991252055552221165810711344767874684305393079096174421066851595190710538449873436664524942803177201535670543641172447751413365584060985488039245094960522618251980431402726553036253156053265695302528858549918222892192012183135907454120104466422471117039019915913380626933201571806187365694399692832452794303126511926687883400336268251942602962629598842585977035848887708019612096528229823223761223035861698616851060438205104442934328562512103956932612648678239801726833527961417722103017259976523738041525250371628522914038044559973313673784636324377732429055180750654147242958574602882254000616086649616491964000793596226737706078983952690750565966271161482894910424917641709240148851061582354827747784181341232939744368770519956736186837511153538087714349842044477361747583160630962450473112798415799955781866094028642440427514431285362784534306334231186628526883742296008944189588248424594505408261764521458293892861035227741011955560296507532542444335659379385268289908931497662989977383599138871788886071907657098670524708807859379351100914247434499663534978656817538413802460756120940336174886746762968225700770270762668795579136738393410120995580438064423487980539512392749133346315224095644617704348757904022300228726475684361770186580686970717318793991803745609634927267145287292242089385899402725157478883791184616177022716940750874196341472980767647757457070269344429082366644005572655279514534821916845976742736919782536786909511787772395739254104386790993747006099739201282014223813291082365753694036759607652383337781270170965742961483210755669592850422218371597998001335632399639696386108726803932103001801520206130516134145471637137725126177572779559798958663675717764562685641910924770276501358322003764402397837265405526948517172695984892888515296609750277756395652297345967262058326684349793545419433450629778911871465610501181181082233237352108436811286154136010912220079123505369597771143065415145113323689360785609297881437988143912215075223706486467673642091321473124070149531135323798381957284911285369782859180669910409931530643561799038859520279527137496536045020535123554499166808872342387738555816361724795948668717650945139401032841679141101967202611108127167764242601545073950503805754528504207308184129947310793073435383768802801240193210401980387235587845444085843444660909828020673265290009315620489328754690798749565951805953953470932851402791654679655963183657497015358123843332409682836407213440034420026916137720567620990980257393327159139701862251764595634841341397466479401705379002753504804904688514393007719499151947030805766110225906703998449318676097774175289034547319222063789321414647554026294200742938163492700383513394191467684738513531716291539122387971419059201430360641317052304217623052328615038567995111559365651690059167118453891355809281625119124385312041561384477751207895486661436002934120657671671068885091725680035306685394605882483165133926525678562246026972962033289200733544259940449566248313469794588468375979500641518671645837492034339425921785288689813115753318489415974924704367823875026875326490930964983153474039774360013999821020308467636989947850546175232414631869808983945042114307636178253068950656615360454314979037591180079348391228818858630917694698835398768405435212957063159198557844932356038662689259817026902702028295957943508009182579139917444559226833433740466716699302196502685546875e-4951
+5.4677992978237119037926089004291297245985762235403450155814707305425575329500966052143410629387408077958710210208052966529504784489330482549602621133847135082257338717668975178538378957084503396349323438489751160934104796903302909028868611999312592165232778075745690821530731336739429587895774023213939331012985331912661021188896306095323395084578542200319963179359407180003251440084380484161504585462684082946932782829488183829817567452314437076943950532707791252404699268678810198502871250235796855577909830559749628817599194837522029036891995648803056846354520653635957919882905363521007017169741463296044392266269433408052686419017699718627761948763856040592690841721239300491445991666051031755802326720329666454066568630314348735511753639418257984253319063825247065727664852328745422305642626091617823968872438962470092440688372515677832232712866924800106797113478024083516199991991274936894113006233377518471389394984262004503058455485659100090665241525454803628182902241401701783637353179296850056973639305945938813428953287892593620291195986011128990061888798763718548789025717537674780281005583347165047846045925077914824515331335131286063574407181821236377907693209224423490663289916878620725507793163931390372011875799729330162278748985052557432333005334989519381566364065326138465761456173231416844807264090741841972247545424908843928136253653308813487994328446248389608261444391573619177442907290731163188581917588219420107047265367485141413919810885909689112244064797106324295291545892937991321479061743491490060940946128274533657682130125169586930571899403551122506297763180795732325134340989331155893724289358918212707392997768032299997207208451112971425779939507837165263255764268971211819536322993221774123134726665579460265871378186589562858761835613344584269098062275786969729830545786485401407774313414954958161677096004701941411411592755485864471870515173326244464631295701572087440183178339987662926763241220698078822661709054601073523477544653542795020468256078409306409100874886828781860529824879343987945751252081314345990313550683792348814627862441324030155730592166581251009922787324590431548734575328663628650380722603024383412564651446272117561042207738413114131099731016728935023152239431311619533848376583687509108453086730196255111695352464186678221927564757730319825223049341618853631333478241227227268084583396688436229936266854011427192767039363517491659523133852472534104124441112346615696891097070121463652258681270378076538381697594264658479637863087159293838880752928175545408262813403793568695416998388572304528748824756265665683890518422696169422338806137532304784682662448207928681740476188343739117833525916386815135793034906806117413105008719197882837614738262050320291539494104952056471606645482046176634075459021552555959590354956262127809953013679512507451424271839221946794056861055980558363033732905772356986051180966474116423192194741572438649215204229781279620370445373851348786918527399785630808242657122705381806661616271132182017797793661244078445747547535623384548769818529655539279036503234072455810991588075181817695975173110136482659854557506203058080551018873203138260451109855100526720073566126209666125604482413705611996796777927332827103568863352291499261312290355143742018042254470707107847293593205234049774839191754781030496978091006099559675240966730110167624903610656473267105556155633783594089546261107653110531808279445757724399186120387548675148632176049190701680305210224388072261974806791922636412897526952793677946622674149577084803568051242934076450942927092705684547042915490323112457971853658760725588190377666477106903106693847278847646032201293023329503348730723947218797410452333910847913892827195814551858335519518939031446093385329182820714173657946661746005901866885589732922652604573972842197231187365263381958925227970038358064987248233271706462687651143350472018043321314534759819524203308490914358596886150053406629512434788155355109100540319857813535695923273426256911552977539394209918630668466632881929661971212772444625151371953428875491139683919687008724010475217255347915698820960215217257390308560235323463096946442080548018754166369706161589705215873687166365628787796501470056870127729464714362172216802441045276911597009443281135389729130222603185665646434661947627628077723219376892727386120519287577405410510114936151502752997122750262781911372625997223415283516995479265631485799456782561734766648462849641064097181818204279498552827825384186202065516999362573388136163077477126602169410435905014077049808497409025369325795765272066650278004200357878990911374982857977108488482528354406313893864211497105765030504600982253488805474531798742143374465080240030582370086699167937651038307909706139327119325418854546478285735654541635477790346964782617354265050767878335230272194896680141986745074630225893106573559558843545841186025169531604151588481389164948914823593944287133336263680358191369540321930649824471425485137777984823525402115151171093313613251350685343824859052220126891551966018355920872775724807128769003243129486808733796350497668255116485157191011858830643898323628223472099280243583164434348347014910398004439821970508280440872759395827943270985008769143562351938091476215083548164137333541883808870019116234099013452929807950151652297436436006149684939775781234660954156154478642694176038524277810483833149798681345708089152179193979463169402340611793486272301808073267534612685593859596787866884211031341417903391749825320454663508370385251831778477311017089729361152161928815389818579983544490982891734081131312309744330960666031291451740885503458543884956367654943799264600314531815427932691107874782328654759293575803481929361961781073958502075438499070633193799699311694287183299423475339817655608058724723221867087563064557636112380829514501382073257737022472866608244164310385205213523702910787182472517125030106491031844871593141759729773907719510044049352857426592936763727969496103940591601975078602859660478614119405428212830134490731706220583788265344728818766885126977588151111984290444321648931907188080336064713873288834096229203276676119810521851726133377700616341304257822975788967472152742255041912584197045423031298506219011800240120182445838590696647416285334515631019799007515682004250060857020904012215375170479800482680554499806010766109655061507421747722461180617361402575082294678925605271083587897845390768226405648508518103525778638618195775128516073959272990148239415346263486966573934577450787243667063244378381883115827207605856174876350045086885320626669331311880593775916269643646395423220549940790476989709243027420158390806135690975149384714684219964938182719962913931464979458639185519531490009437619838306362365453754807654884704163490469296444427144778593725687358437087390151990694667516279202024332494828210657618261952038597230263799412584275851667403910657370879707181053365818502680037431560091209982641738995652793235851569372314130107647166085235615697257094269133100914135783178856280392139325001352841718610484616627448189556913621837791650699820323059708766420810133584841826718631681683381743511974264126250984214812397119978273917903889865891718836792263377888052458189238746074986456016681098722869419588274020181430652732817858728473849369539367463917171317324882099804999043054467247785592038464723442276239896066431580123756428540074945472427752568981171400621705853374875885943072600692576914790467205905272372594740187988081900317493185005142913607163380720069786786782095331840893694073778325119471833528492917081008547303414509381563617864195257751546539575461435803625993888325647883541039192368366987400263049681218831477776345118518503709588840859023379762456561030683928115349942393963185677123055324771693784214924931737043793679546051454845624150270955450608318747395755728950832754611277041359602301205138509175543313522772786504141007552691902249572375175731740923618769197304652898352694386665448260033458575323252814233868098279476166764258284911434288072243178941698347365985427696983129579496059032032841281149923518087084876885114369033227736521245740554711771423492719899982357711910225545480424688322195336240492253136281857837808491795993788199125205555222116581071134476787468430539307909617442106685159519071053844987343666452494280317720153567054364117244775141336558406098548803924509496052261825198043140272655303625315605326569530252885854991822289219201218313590745412010446642247111703901991591338062693320157180618736569439969283245279430312651192668788340033626825194260296262959884258597703584888770801961209652822982322376122303586169861685106043820510444293432856251210395693261264867823980172683352796141772210301725997652373804152525037162852291403804455997331367378463632437773242905518075065414724295857460288225400061608664961649196400079359622673770607898395269075056596627116148289491042491764170924014885106158235482774778418134123293974436877051995673618683751115353808771434984204447736174758316063096245047311279841579995578186609402864244042751443128536278453430633423118662852688374229600894418958824842459450540826176452145829389286103522774101195556029650753254244433565937938526828990893149766298997738359913887178888607190765709867052470880785937935110091424743449966353497865681753841380246075612094033617488674676296822570077027076266879557913673839341012099558043806442348798053951239274913334631522409564461770434875790402230022872647568436177018658068697071731879399180374560963492726714528729224208938589940272515747888379118461617702271694075087419634147298076764775745707026934442908236664400557265527951453482191684597674273691978253678690951178777239573925410438679099374700609973920128201422381329108236575369403675960765238333778127017096574296148321075566959285042221837159799800133563239963969638610872680393210300180152020613051613414547163713772512617757277955979895866367571776456268564191092477027650135832200376440239783726540552694851717269598489288851529660975027775639565229734596726205832668434979354541943345062977891187146561050118118108223323735210843681128615413601091222007912350536959777114306541514511332368936078560929788143798814391221507522370648646767364209132147312407014953113532379838195728491128536978285918066991040993153064356179903885952027952713749653604502053512355449916680887234238773855581636172479594866871765094513940103284167914110196720261110812716776424260154507395050380575452850420730818412994731079307343538376880280124019321040198038723558784544408584344466090982802067326529000931562048932875469079874956595180595395347093285140279165467965596318365749701535812384333240968283640721344003442002691613772056762099098025739332715913970186225176459563484134139746647940170537900275350480490468851439300771949915194703080576611022590670399844931867609777417528903454731922206378932141464755402629420074293816349270038351339419146768473851353171629153912238797141905920143036064131705230421762305232861503856799511155936565169005916711845389135580928162511912438531204156138447775120789548666143600293412065767167106888509172568003530668539460588248316513392652567856224602697296203328920073354425994044956624831346979458846837597950064151867164583749203433942592178528868981311575331848941597492470436782387502687532649093096498315347403977436001399982102030846763698994785054617523241463186980898394504211430763617825306895065661536045431497903759118007934839122881885863091769469883539876840543521295706315919855784493235603866268925981702690270202829595794350800918257913991744455922683343374046671669930219650268554687501e-4951
+-5.4677992978237119037926089004291297245985762235403450155814707305425575329500966052143410629387408077958710210208052966529504784489330482549602621133847135082257338717668975178538378957084503396349323438489751160934104796903302909028868611999312592165232778075745690821530731336739429587895774023213939331012985331912661021188896306095323395084578542200319963179359407180003251440084380484161504585462684082946932782829488183829817567452314437076943950532707791252404699268678810198502871250235796855577909830559749628817599194837522029036891995648803056846354520653635957919882905363521007017169741463296044392266269433408052686419017699718627761948763856040592690841721239300491445991666051031755802326720329666454066568630314348735511753639418257984253319063825247065727664852328745422305642626091617823968872438962470092440688372515677832232712866924800106797113478024083516199991991274936894113006233377518471389394984262004503058455485659100090665241525454803628182902241401701783637353179296850056973639305945938813428953287892593620291195986011128990061888798763718548789025717537674780281005583347165047846045925077914824515331335131286063574407181821236377907693209224423490663289916878620725507793163931390372011875799729330162278748985052557432333005334989519381566364065326138465761456173231416844807264090741841972247545424908843928136253653308813487994328446248389608261444391573619177442907290731163188581917588219420107047265367485141413919810885909689112244064797106324295291545892937991321479061743491490060940946128274533657682130125169586930571899403551122506297763180795732325134340989331155893724289358918212707392997768032299997207208451112971425779939507837165263255764268971211819536322993221774123134726665579460265871378186589562858761835613344584269098062275786969729830545786485401407774313414954958161677096004701941411411592755485864471870515173326244464631295701572087440183178339987662926763241220698078822661709054601073523477544653542795020468256078409306409100874886828781860529824879343987945751252081314345990313550683792348814627862441324030155730592166581251009922787324590431548734575328663628650380722603024383412564651446272117561042207738413114131099731016728935023152239431311619533848376583687509108453086730196255111695352464186678221927564757730319825223049341618853631333478241227227268084583396688436229936266854011427192767039363517491659523133852472534104124441112346615696891097070121463652258681270378076538381697594264658479637863087159293838880752928175545408262813403793568695416998388572304528748824756265665683890518422696169422338806137532304784682662448207928681740476188343739117833525916386815135793034906806117413105008719197882837614738262050320291539494104952056471606645482046176634075459021552555959590354956262127809953013679512507451424271839221946794056861055980558363033732905772356986051180966474116423192194741572438649215204229781279620370445373851348786918527399785630808242657122705381806661616271132182017797793661244078445747547535623384548769818529655539279036503234072455810991588075181817695975173110136482659854557506203058080551018873203138260451109855100526720073566126209666125604482413705611996796777927332827103568863352291499261312290355143742018042254470707107847293593205234049774839191754781030496978091006099559675240966730110167624903610656473267105556155633783594089546261107653110531808279445757724399186120387548675148632176049190701680305210224388072261974806791922636412897526952793677946622674149577084803568051242934076450942927092705684547042915490323112457971853658760725588190377666477106903106693847278847646032201293023329503348730723947218797410452333910847913892827195814551858335519518939031446093385329182820714173657946661746005901866885589732922652604573972842197231187365263381958925227970038358064987248233271706462687651143350472018043321314534759819524203308490914358596886150053406629512434788155355109100540319857813535695923273426256911552977539394209918630668466632881929661971212772444625151371953428875491139683919687008724010475217255347915698820960215217257390308560235323463096946442080548018754166369706161589705215873687166365628787796501470056870127729464714362172216802441045276911597009443281135389729130222603185665646434661947627628077723219376892727386120519287577405410510114936151502752997122750262781911372625997223415283516995479265631485799456782561734766648462849641064097181818204279498552827825384186202065516999362573388136163077477126602169410435905014077049808497409025369325795765272066650278004200357878990911374982857977108488482528354406313893864211497105765030504600982253488805474531798742143374465080240030582370086699167937651038307909706139327119325418854546478285735654541635477790346964782617354265050767878335230272194896680141986745074630225893106573559558843545841186025169531604151588481389164948914823593944287133336263680358191369540321930649824471425485137777984823525402115151171093313613251350685343824859052220126891551966018355920872775724807128769003243129486808733796350497668255116485157191011858830643898323628223472099280243583164434348347014910398004439821970508280440872759395827943270985008769143562351938091476215083548164137333541883808870019116234099013452929807950151652297436436006149684939775781234660954156154478642694176038524277810483833149798681345708089152179193979463169402340611793486272301808073267534612685593859596787866884211031341417903391749825320454663508370385251831778477311017089729361152161928815389818579983544490982891734081131312309744330960666031291451740885503458543884956367654943799264600314531815427932691107874782328654759293575803481929361961781073958502075438499070633193799699311694287183299423475339817655608058724723221867087563064557636112380829514501382073257737022472866608244164310385205213523702910787182472517125030106491031844871593141759729773907719510044049352857426592936763727969496103940591601975078602859660478614119405428212830134490731706220583788265344728818766885126977588151111984290444321648931907188080336064713873288834096229203276676119810521851726133377700616341304257822975788967472152742255041912584197045423031298506219011800240120182445838590696647416285334515631019799007515682004250060857020904012215375170479800482680554499806010766109655061507421747722461180617361402575082294678925605271083587897845390768226405648508518103525778638618195775128516073959272990148239415346263486966573934577450787243667063244378381883115827207605856174876350045086885320626669331311880593775916269643646395423220549940790476989709243027420158390806135690975149384714684219964938182719962913931464979458639185519531490009437619838306362365453754807654884704163490469296444427144778593725687358437087390151990694667516279202024332494828210657618261952038597230263799412584275851667403910657370879707181053365818502680037431560091209982641738995652793235851569372314130107647166085235615697257094269133100914135783178856280392139325001352841718610484616627448189556913621837791650699820323059708766420810133584841826718631681683381743511974264126250984214812397119978273917903889865891718836792263377888052458189238746074986456016681098722869419588274020181430652732817858728473849369539367463917171317324882099804999043054467247785592038464723442276239896066431580123756428540074945472427752568981171400621705853374875885943072600692576914790467205905272372594740187988081900317493185005142913607163380720069786786782095331840893694073778325119471833528492917081008547303414509381563617864195257751546539575461435803625993888325647883541039192368366987400263049681218831477776345118518503709588840859023379762456561030683928115349942393963185677123055324771693784214924931737043793679546051454845624150270955450608318747395755728950832754611277041359602301205138509175543313522772786504141007552691902249572375175731740923618769197304652898352694386665448260033458575323252814233868098279476166764258284911434288072243178941698347365985427696983129579496059032032841281149923518087084876885114369033227736521245740554711771423492719899982357711910225545480424688322195336240492253136281857837808491795993788199125205555222116581071134476787468430539307909617442106685159519071053844987343666452494280317720153567054364117244775141336558406098548803924509496052261825198043140272655303625315605326569530252885854991822289219201218313590745412010446642247111703901991591338062693320157180618736569439969283245279430312651192668788340033626825194260296262959884258597703584888770801961209652822982322376122303586169861685106043820510444293432856251210395693261264867823980172683352796141772210301725997652373804152525037162852291403804455997331367378463632437773242905518075065414724295857460288225400061608664961649196400079359622673770607898395269075056596627116148289491042491764170924014885106158235482774778418134123293974436877051995673618683751115353808771434984204447736174758316063096245047311279841579995578186609402864244042751443128536278453430633423118662852688374229600894418958824842459450540826176452145829389286103522774101195556029650753254244433565937938526828990893149766298997738359913887178888607190765709867052470880785937935110091424743449966353497865681753841380246075612094033617488674676296822570077027076266879557913673839341012099558043806442348798053951239274913334631522409564461770434875790402230022872647568436177018658068697071731879399180374560963492726714528729224208938589940272515747888379118461617702271694075087419634147298076764775745707026934442908236664400557265527951453482191684597674273691978253678690951178777239573925410438679099374700609973920128201422381329108236575369403675960765238333778127017096574296148321075566959285042221837159799800133563239963969638610872680393210300180152020613051613414547163713772512617757277955979895866367571776456268564191092477027650135832200376440239783726540552694851717269598489288851529660975027775639565229734596726205832668434979354541943345062977891187146561050118118108223323735210843681128615413601091222007912350536959777114306541514511332368936078560929788143798814391221507522370648646767364209132147312407014953113532379838195728491128536978285918066991040993153064356179903885952027952713749653604502053512355449916680887234238773855581636172479594866871765094513940103284167914110196720261110812716776424260154507395050380575452850420730818412994731079307343538376880280124019321040198038723558784544408584344466090982802067326529000931562048932875469079874956595180595395347093285140279165467965596318365749701535812384333240968283640721344003442002691613772056762099098025739332715913970186225176459563484134139746647940170537900275350480490468851439300771949915194703080576611022590670399844931867609777417528903454731922206378932141464755402629420074293816349270038351339419146768473851353171629153912238797141905920143036064131705230421762305232861503856799511155936565169005916711845389135580928162511912438531204156138447775120789548666143600293412065767167106888509172568003530668539460588248316513392652567856224602697296203328920073354425994044956624831346979458846837597950064151867164583749203433942592178528868981311575331848941597492470436782387502687532649093096498315347403977436001399982102030846763698994785054617523241463186980898394504211430763617825306895065661536045431497903759118007934839122881885863091769469883539876840543521295706315919855784493235603866268925981702690270202829595794350800918257913991744455922683343374046671669930219650268554687499e-4951
+-5.46779929782371190379260890042912972459857622354034501558147073054255753295009660521434106293874080779587102102080529665295047844893304825496026211338471350822573387176689751785383789570845033963493234384897511609341047969033029090288686119993125921652327780757456908215307313367394295878957740232139393310129853319126610211888963060953233950845785422003199631793594071800032514400843804841615045854626840829469327828294881838298175674523144370769439505327077912524046992686788101985028712502357968555779098305597496288175991948375220290368919956488030568463545206536359579198829053635210070171697414632960443922662694334080526864190176997186277619487638560405926908417212393004914459916660510317558023267203296664540665686303143487355117536394182579842533190638252470657276648523287454223056426260916178239688724389624700924406883725156778322327128669248001067971134780240835161999919912749368941130062333775184713893949842620045030584554856591000906652415254548036281829022414017017836373531792968500569736393059459388134289532878925936202911959860111289900618887987637185487890257175376747802810055833471650478460459250779148245153313351312860635744071818212363779076932092244234906632899168786207255077931639313903720118757997293301622787489850525574323330053349895193815663640653261384657614561732314168448072640907418419722475454249088439281362536533088134879943284462483896082614443915736191774429072907311631885819175882194201070472653674851414139198108859096891122440647971063242952915458929379913214790617434914900609409461282745336576821301251695869305718994035511225062977631807957323251343409893311558937242893589182127073929977680322999972072084511129714257799395078371652632557642689712118195363229932217741231347266655794602658713781865895628587618356133445842690980622757869697298305457864854014077743134149549581616770960047019414114115927554858644718705151733262444646312957015720874401831783399876629267632412206980788226617090546010735234775446535427950204682560784093064091008748868287818605298248793439879457512520813143459903135506837923488146278624413240301557305921665812510099227873245904315487345753286636286503807226030243834125646514462721175610422077384131141310997310167289350231522394313116195338483765836875091084530867301962551116953524641866782219275647577303198252230493416188536313334782412272272680845833966884362299362668540114271927670393635174916595231338524725341041244411123466156968910970701214636522586812703780765383816975942646584796378630871592938388807529281755454082628134037935686954169983885723045287488247562656656838905184226961694223388061375323047846826624482079286817404761883437391178335259163868151357930349068061174131050087191978828376147382620503202915394941049520564716066454820461766340754590215525559595903549562621278099530136795125074514242718392219467940568610559805583630337329057723569860511809664741164231921947415724386492152042297812796203704453738513487869185273997856308082426571227053818066616162711321820177977936612440784457475475356233845487698185296555392790365032340724558109915880751818176959751731101364826598545575062030580805510188732031382604511098551005267200735661262096661256044824137056119967967779273328271035688633522914992613122903551437420180422544707071078472935932052340497748391917547810304969780910060995596752409667301101676249036106564732671055561556337835940895462611076531105318082794457577243991861203875486751486321760491907016803052102243880722619748067919226364128975269527936779466226741495770848035680512429340764509429270927056845470429154903231124579718536587607255881903776664771069031066938472788476460322012930233295033487307239472187974104523339108479138928271958145518583355195189390314460933853291828207141736579466617460059018668855897329226526045739728421972311873652633819589252279700383580649872482332717064626876511433504720180433213145347598195242033084909143585968861500534066295124347881553551091005403198578135356959232734262569115529775393942099186306684666328819296619712127724446251513719534288754911396839196870087240104752172553479156988209602152172573903085602353234630969464420805480187541663697061615897052158736871663656287877965014700568701277294647143621722168024410452769115970094432811353897291302226031856656464346619476276280777232193768927273861205192875774054105101149361515027529971227502627819113726259972234152835169954792656314857994567825617347666484628496410640971818182042794985528278253841862020655169993625733881361630774771266021694104359050140770498084974090253693257957652720666502780042003578789909113749828579771084884825283544063138938642114971057650305046009822534888054745317987421433744650802400305823700866991679376510383079097061393271193254188545464782857356545416354777903469647826173542650507678783352302721948966801419867450746302258931065735595588435458411860251695316041515884813891649489148235939442871333362636803581913695403219306498244714254851377779848235254021151511710933136132513506853438248590522201268915519660183559208727757248071287690032431294868087337963504976682551164851571910118588306438983236282234720992802435831644343483470149103980044398219705082804408727593958279432709850087691435623519380914762150835481641373335418838088700191162340990134529298079501516522974364360061496849397757812346609541561544786426941760385242778104838331497986813457080891521791939794631694023406117934862723018080732675346126855938595967878668842110313414179033917498253204546635083703852518317784773110170897293611521619288153898185799835444909828917340811313123097443309606660312914517408855034585438849563676549437992646003145318154279326911078747823286547592935758034819293619617810739585020754384990706331937996993116942871832994234753398176556080587247232218670875630645576361123808295145013820732577370224728666082441643103852052135237029107871824725171250301064910318448715931417597297739077195100440493528574265929367637279694961039405916019750786028596604786141194054282128301344907317062205837882653447288187668851269775881511119842904443216489319071880803360647138732888340962292032766761198105218517261333777006163413042578229757889674721527422550419125841970454230312985062190118002401201824458385906966474162853345156310197990075156820042500608570209040122153751704798004826805544998060107661096550615074217477224611806173614025750822946789256052710835878978453907682264056485085181035257786386181957751285160739592729901482394153462634869665739345774507872436670632443783818831158272076058561748763500450868853206266693313118805937759162696436463954232205499407904769897092430274201583908061356909751493847146842199649381827199629139314649794586391855195314900094376198383063623654537548076548847041634904692964444271447785937256873584370873901519906946675162792020243324948282106576182619520385972302637994125842758516674039106573708797071810533658185026800374315600912099826417389956527932358515693723141301076471660852356156972570942691331009141357831788562803921393250013528417186104846166274481895569136218377916506998203230597087664208101335848418267186316816833817435119742641262509842148123971199782739179038898658917188367922633778880524581892387460749864560166810987228694195882740201814306527328178587284738493695393674639171713173248820998049990430544672477855920384647234422762398960664315801237564285400749454724277525689811714006217058533748758859430726006925769147904672059052723725947401879880819003174931850051429136071633807200697867867820953318408936940737783251194718335284929170810085473034145093815636178641952577515465395754614358036259938883256478835410391923683669874002630496812188314777763451185185037095888408590233797624565610306839281153499423939631856771230553247716937842149249317370437936795460514548456241502709554506083187473957557289508327546112770413596023012051385091755433135227727865041410075526919022495723751757317409236187691973046528983526943866654482600334585753232528142338680982794761667642582849114342880722431789416983473659854276969831295794960590320328412811499235180870848768851143690332277365212457405547117714234927198999823577119102255454804246883221953362404922531362818578378084917959937881991252055552221165810711344767874684305393079096174421066851595190710538449873436664524942803177201535670543641172447751413365584060985488039245094960522618251980431402726553036253156053265695302528858549918222892192012183135907454120104466422471117039019915913380626933201571806187365694399692832452794303126511926687883400336268251942602962629598842585977035848887708019612096528229823223761223035861698616851060438205104442934328562512103956932612648678239801726833527961417722103017259976523738041525250371628522914038044559973313673784636324377732429055180750654147242958574602882254000616086649616491964000793596226737706078983952690750565966271161482894910424917641709240148851061582354827747784181341232939744368770519956736186837511153538087714349842044477361747583160630962450473112798415799955781866094028642440427514431285362784534306334231186628526883742296008944189588248424594505408261764521458293892861035227741011955560296507532542444335659379385268289908931497662989977383599138871788886071907657098670524708807859379351100914247434499663534978656817538413802460756120940336174886746762968225700770270762668795579136738393410120995580438064423487980539512392749133346315224095644617704348757904022300228726475684361770186580686970717318793991803745609634927267145287292242089385899402725157478883791184616177022716940750874196341472980767647757457070269344429082366644005572655279514534821916845976742736919782536786909511787772395739254104386790993747006099739201282014223813291082365753694036759607652383337781270170965742961483210755669592850422218371597998001335632399639696386108726803932103001801520206130516134145471637137725126177572779559798958663675717764562685641910924770276501358322003764402397837265405526948517172695984892888515296609750277756395652297345967262058326684349793545419433450629778911871465610501181181082233237352108436811286154136010912220079123505369597771143065415145113323689360785609297881437988143912215075223706486467673642091321473124070149531135323798381957284911285369782859180669910409931530643561799038859520279527137496536045020535123554499166808872342387738555816361724795948668717650945139401032841679141101967202611108127167764242601545073950503805754528504207308184129947310793073435383768802801240193210401980387235587845444085843444660909828020673265290009315620489328754690798749565951805953953470932851402791654679655963183657497015358123843332409682836407213440034420026916137720567620990980257393327159139701862251764595634841341397466479401705379002753504804904688514393007719499151947030805766110225906703998449318676097774175289034547319222063789321414647554026294200742938163492700383513394191467684738513531716291539122387971419059201430360641317052304217623052328615038567995111559365651690059167118453891355809281625119124385312041561384477751207895486661436002934120657671671068885091725680035306685394605882483165133926525678562246026972962033289200733544259940449566248313469794588468375979500641518671645837492034339425921785288689813115753318489415974924704367823875026875326490930964983153474039774360013999821020308467636989947850546175232414631869808983945042114307636178253068950656615360454314979037591180079348391228818858630917694698835398768405435212957063159198557844932356038662689259817026902702028295957943508009182579139917444559226833433740466716699302196502685546875e-4951
+-5.4677992978237119037926089004291297245985762235403450155814707305425575329500966052143410629387408077958710210208052966529504784489330482549602621133847135082257338717668975178538378957084503396349323438489751160934104796903302909028868611999312592165232778075745690821530731336739429587895774023213939331012985331912661021188896306095323395084578542200319963179359407180003251440084380484161504585462684082946932782829488183829817567452314437076943950532707791252404699268678810198502871250235796855577909830559749628817599194837522029036891995648803056846354520653635957919882905363521007017169741463296044392266269433408052686419017699718627761948763856040592690841721239300491445991666051031755802326720329666454066568630314348735511753639418257984253319063825247065727664852328745422305642626091617823968872438962470092440688372515677832232712866924800106797113478024083516199991991274936894113006233377518471389394984262004503058455485659100090665241525454803628182902241401701783637353179296850056973639305945938813428953287892593620291195986011128990061888798763718548789025717537674780281005583347165047846045925077914824515331335131286063574407181821236377907693209224423490663289916878620725507793163931390372011875799729330162278748985052557432333005334989519381566364065326138465761456173231416844807264090741841972247545424908843928136253653308813487994328446248389608261444391573619177442907290731163188581917588219420107047265367485141413919810885909689112244064797106324295291545892937991321479061743491490060940946128274533657682130125169586930571899403551122506297763180795732325134340989331155893724289358918212707392997768032299997207208451112971425779939507837165263255764268971211819536322993221774123134726665579460265871378186589562858761835613344584269098062275786969729830545786485401407774313414954958161677096004701941411411592755485864471870515173326244464631295701572087440183178339987662926763241220698078822661709054601073523477544653542795020468256078409306409100874886828781860529824879343987945751252081314345990313550683792348814627862441324030155730592166581251009922787324590431548734575328663628650380722603024383412564651446272117561042207738413114131099731016728935023152239431311619533848376583687509108453086730196255111695352464186678221927564757730319825223049341618853631333478241227227268084583396688436229936266854011427192767039363517491659523133852472534104124441112346615696891097070121463652258681270378076538381697594264658479637863087159293838880752928175545408262813403793568695416998388572304528748824756265665683890518422696169422338806137532304784682662448207928681740476188343739117833525916386815135793034906806117413105008719197882837614738262050320291539494104952056471606645482046176634075459021552555959590354956262127809953013679512507451424271839221946794056861055980558363033732905772356986051180966474116423192194741572438649215204229781279620370445373851348786918527399785630808242657122705381806661616271132182017797793661244078445747547535623384548769818529655539279036503234072455810991588075181817695975173110136482659854557506203058080551018873203138260451109855100526720073566126209666125604482413705611996796777927332827103568863352291499261312290355143742018042254470707107847293593205234049774839191754781030496978091006099559675240966730110167624903610656473267105556155633783594089546261107653110531808279445757724399186120387548675148632176049190701680305210224388072261974806791922636412897526952793677946622674149577084803568051242934076450942927092705684547042915490323112457971853658760725588190377666477106903106693847278847646032201293023329503348730723947218797410452333910847913892827195814551858335519518939031446093385329182820714173657946661746005901866885589732922652604573972842197231187365263381958925227970038358064987248233271706462687651143350472018043321314534759819524203308490914358596886150053406629512434788155355109100540319857813535695923273426256911552977539394209918630668466632881929661971212772444625151371953428875491139683919687008724010475217255347915698820960215217257390308560235323463096946442080548018754166369706161589705215873687166365628787796501470056870127729464714362172216802441045276911597009443281135389729130222603185665646434661947627628077723219376892727386120519287577405410510114936151502752997122750262781911372625997223415283516995479265631485799456782561734766648462849641064097181818204279498552827825384186202065516999362573388136163077477126602169410435905014077049808497409025369325795765272066650278004200357878990911374982857977108488482528354406313893864211497105765030504600982253488805474531798742143374465080240030582370086699167937651038307909706139327119325418854546478285735654541635477790346964782617354265050767878335230272194896680141986745074630225893106573559558843545841186025169531604151588481389164948914823593944287133336263680358191369540321930649824471425485137777984823525402115151171093313613251350685343824859052220126891551966018355920872775724807128769003243129486808733796350497668255116485157191011858830643898323628223472099280243583164434348347014910398004439821970508280440872759395827943270985008769143562351938091476215083548164137333541883808870019116234099013452929807950151652297436436006149684939775781234660954156154478642694176038524277810483833149798681345708089152179193979463169402340611793486272301808073267534612685593859596787866884211031341417903391749825320454663508370385251831778477311017089729361152161928815389818579983544490982891734081131312309744330960666031291451740885503458543884956367654943799264600314531815427932691107874782328654759293575803481929361961781073958502075438499070633193799699311694287183299423475339817655608058724723221867087563064557636112380829514501382073257737022472866608244164310385205213523702910787182472517125030106491031844871593141759729773907719510044049352857426592936763727969496103940591601975078602859660478614119405428212830134490731706220583788265344728818766885126977588151111984290444321648931907188080336064713873288834096229203276676119810521851726133377700616341304257822975788967472152742255041912584197045423031298506219011800240120182445838590696647416285334515631019799007515682004250060857020904012215375170479800482680554499806010766109655061507421747722461180617361402575082294678925605271083587897845390768226405648508518103525778638618195775128516073959272990148239415346263486966573934577450787243667063244378381883115827207605856174876350045086885320626669331311880593775916269643646395423220549940790476989709243027420158390806135690975149384714684219964938182719962913931464979458639185519531490009437619838306362365453754807654884704163490469296444427144778593725687358437087390151990694667516279202024332494828210657618261952038597230263799412584275851667403910657370879707181053365818502680037431560091209982641738995652793235851569372314130107647166085235615697257094269133100914135783178856280392139325001352841718610484616627448189556913621837791650699820323059708766420810133584841826718631681683381743511974264126250984214812397119978273917903889865891718836792263377888052458189238746074986456016681098722869419588274020181430652732817858728473849369539367463917171317324882099804999043054467247785592038464723442276239896066431580123756428540074945472427752568981171400621705853374875885943072600692576914790467205905272372594740187988081900317493185005142913607163380720069786786782095331840893694073778325119471833528492917081008547303414509381563617864195257751546539575461435803625993888325647883541039192368366987400263049681218831477776345118518503709588840859023379762456561030683928115349942393963185677123055324771693784214924931737043793679546051454845624150270955450608318747395755728950832754611277041359602301205138509175543313522772786504141007552691902249572375175731740923618769197304652898352694386665448260033458575323252814233868098279476166764258284911434288072243178941698347365985427696983129579496059032032841281149923518087084876885114369033227736521245740554711771423492719899982357711910225545480424688322195336240492253136281857837808491795993788199125205555222116581071134476787468430539307909617442106685159519071053844987343666452494280317720153567054364117244775141336558406098548803924509496052261825198043140272655303625315605326569530252885854991822289219201218313590745412010446642247111703901991591338062693320157180618736569439969283245279430312651192668788340033626825194260296262959884258597703584888770801961209652822982322376122303586169861685106043820510444293432856251210395693261264867823980172683352796141772210301725997652373804152525037162852291403804455997331367378463632437773242905518075065414724295857460288225400061608664961649196400079359622673770607898395269075056596627116148289491042491764170924014885106158235482774778418134123293974436877051995673618683751115353808771434984204447736174758316063096245047311279841579995578186609402864244042751443128536278453430633423118662852688374229600894418958824842459450540826176452145829389286103522774101195556029650753254244433565937938526828990893149766298997738359913887178888607190765709867052470880785937935110091424743449966353497865681753841380246075612094033617488674676296822570077027076266879557913673839341012099558043806442348798053951239274913334631522409564461770434875790402230022872647568436177018658068697071731879399180374560963492726714528729224208938589940272515747888379118461617702271694075087419634147298076764775745707026934442908236664400557265527951453482191684597674273691978253678690951178777239573925410438679099374700609973920128201422381329108236575369403675960765238333778127017096574296148321075566959285042221837159799800133563239963969638610872680393210300180152020613051613414547163713772512617757277955979895866367571776456268564191092477027650135832200376440239783726540552694851717269598489288851529660975027775639565229734596726205832668434979354541943345062977891187146561050118118108223323735210843681128615413601091222007912350536959777114306541514511332368936078560929788143798814391221507522370648646767364209132147312407014953113532379838195728491128536978285918066991040993153064356179903885952027952713749653604502053512355449916680887234238773855581636172479594866871765094513940103284167914110196720261110812716776424260154507395050380575452850420730818412994731079307343538376880280124019321040198038723558784544408584344466090982802067326529000931562048932875469079874956595180595395347093285140279165467965596318365749701535812384333240968283640721344003442002691613772056762099098025739332715913970186225176459563484134139746647940170537900275350480490468851439300771949915194703080576611022590670399844931867609777417528903454731922206378932141464755402629420074293816349270038351339419146768473851353171629153912238797141905920143036064131705230421762305232861503856799511155936565169005916711845389135580928162511912438531204156138447775120789548666143600293412065767167106888509172568003530668539460588248316513392652567856224602697296203328920073354425994044956624831346979458846837597950064151867164583749203433942592178528868981311575331848941597492470436782387502687532649093096498315347403977436001399982102030846763698994785054617523241463186980898394504211430763617825306895065661536045431497903759118007934839122881885863091769469883539876840543521295706315919855784493235603866268925981702690270202829595794350800918257913991744455922683343374046671669930219650268554687501e-4951
+5.4677992978237119037926089004291297245985762235403450155814707305425575329500966052143410629387408077958710210208052966529504784489330482549602621133847135082257338717668975178538378957084503396349323438489751160934104796903302909028868611999312592165232778075745690821530731336739429587895774023213939331012985331912661021188896306095323395084578542200319963179359407180003251440084380484161504585462684082946932782829488183829817567452314437076943950532707791252404699268678810198502871250235796855577909830559749628817599194837522029036891995648803056846354520653635957919882905363521007017169741463296044392266269433408052686419017699718627761948763856040592690841721239300491445991666051031755802326720329666454066568630314348735511753639418257984253319063825247065727664852328745422305642626091617823968872438962470092440688372515677832232712866924800106797113478024083516199991991274936894113006233377518471389394984262004503058455485659100090665241525454803628182902241401701783637353179296850056973639305945938813428953287892593620291195986011128990061888798763718548789025717537674780281005583347165047846045925077914824515331335131286063574407181821236377907693209224423490663289916878620725507793163931390372011875799729330162278748985052557432333005334989519381566364065326138465761456173231416844807264090741841972247545424908843928136253653308813487994328446248389608261444391573619177442907290731163188581917588219420107047265367485141413919810885909689112244064797106324295291545892937991321479061743491490060940946128274533657682130125169586930571899403551122506297763180795732325134340989331155893724289358918212707392997768032299997207208451112971425779939507837165263255764268971211819536322993221774123134726665579460265871378186589562858761835613344584269098062275786969729830545786485401407774313414954958161677096004701941411411592755485864471870515173326244464631295701572087440183178339987662926763241220698078822661709054601073523477544653542795020468256078409306409100874886828781860529824879343987945751252081314345990313550683792348814627862441324030155730592166581251009922787324590431548734575328663628650380722603024383412564651446272117561042207738413114131099731016728935023152239431311619533848376583687509108453086730196255111695352464186678221927564757730319825223049341618853631333478241227227268084583396688436229936266854011427192767039363517491659523133852472534104124441112346615696891097070121463652258681270378076538381697594264658479637863087159293838880752928175545408262813403793568695416998388572304528748824756265665683890518422696169422338806137532304784682662448207928681740476188343739117833525916386815135793034906806117413105008719197882837614738262050320291539494104952056471606645482046176634075459021552555959590354956262127809953013679512507451424271839221946794056861055980558363033732905772356986051180966474116423192194741572438649215204229781279620370445373851348786918527399785630808242657122705381806661616271132182017797793661244078445747547535623384548769818529655539279036503234072455810991588075181817695975173110136482659854557506203058080551018873203138260451109855100526720073566126209666125604482413705611996796777927332827103568863352291499261312290355143742018042254470707107847293593205234049774839191754781030496978091006099559675240966730110167624903610656473267105556155633783594089546261107653110531808279445757724399186120387548675148632176049190701680305210224388072261974806791922636412897526952793677946622674149577084803568051242934076450942927092705684547042915490323112457971853658760725588190377666477106903106693847278847646032201293023329503348730723947218797410452333910847913892827195814551858335519518939031446093385329182820714173657946661746005901866885589732922652604573972842197231187365263381958925227970038358064987248233271706462687651143350472018043321314534759819524203308490914358596886150053406629512434788155355109100540319857813535695923273426256911552977539394209918630668466632881929661971212772444625151371953428875491139683919687008724010475217255347915698820960215217257390308560235323463096946442080548018754166369706161589705215873687166365628787796501470056870127729464714362172216802441045276911597009443281135389729130222603185665646434661947627628077723219376892727386120519287577405410510114936151502752997122750262781911372625997223415283516995479265631485799456782561734766648462849641064097181818204279498552827825384186202065516999362573388136163077477126602169410435905014077049808497409025369325795765272066650278004200357878990911374982857977108488482528354406313893864211497105765030504600982253488805474531798742143374465080240030582370086699167937651038307909706139327119325418854546478285735654541635477790346964782617354265050767878335230272194896680141986745074630225893106573559558843545841186025169531604151588481389164948914823593944287133336263680358191369540321930649824471425485137777984823525402115151171093313613251350685343824859052220126891551966018355920872775724807128769003243129486808733796350497668255116485157191011858830643898323628223472099280243583164434348347014910398004439821970508280440872759395827943270985008769143562351938091476215083548164137333541883808870019116234099013452929807950151652297436436006149684939775781234660954156154478642694176038524277810483833149798681345708089152179193979463169402340611793486272301808073267534612685593859596787866884211031341417903391749825320454663508370385251831778477311017089729361152161928815389818579983544490982891734081131312309744330960666031291451740885503458543884956367654943799264600314531815427932691107874782328654759293575803481929361961781073958502075438499070633193799699311694287183299423475339817655608058724723221867087563064557636112380829514501382073257737022472866608244164310385205213523702910787182472517125030106491031844871593141759729773907719510044049352857426592936763727969496103940591601975078602859660478614119405428212830134490731706220583788265344728818766885126977588151111984290444321648931907188080336064713873288834096229203276676119810521851726133377700616341304257822975788967472152742255041912584197045423031298506219011800240120182445838590696647416285334515631019799007515682004250060857020904012215375170479800482680554499806010766109655061507421747722461180617361402575082294678925605271083587897845390768226405648508518103525778638618195775128516073959272990148239415346263486966573934577450787243667063244378381883115827207605856174876350045086885320626669331311880593775916269643646395423220549940790476989709243027420158390806135690975149384714684219964938182719962913931464979458639185519531490009437619838306362365453754807654884704163490469296444427144778593725687358437087390151990694667516279202024332494828210657618261952038597230263799412584275851667403910657370879707181053365818502680037431560091209982641738995652793235851569372314130107647166085235615697257094269133100914135783178856280392139325001352841718610484616627448189556913621837791650699820323059708766420810133584841826718631681683381743511974264126250984214812397119978273917903889865891718836792263377888052458189238746074986456016681098722869419588274020181430652732817858728473849369539367463917171317324882099804999043054467247785592038464723442276239896066431580123756428540074945472427752568981171400621705853374875885943072600692576914790467205905272372594740187988081900317493185005142913607163380720069786786782095331840893694073778325119471833528492917081008547303414509381563617864195257751546539575461435803625993888325647883541039192368366987400263049681218831477776345118518503709588840859023379762456561030683928115349942393963185677123055324771693784214924931737043793679546051454845624150270955450608318747395755728950832754611277041359602301205138509175543313522772786504141007552691902249572375175731740923618769197304652898352694386665448260033458575323252814233868098279476166764258284911434288072243178941698347365985427696983129579496059032032841281149923518087084876885114369033227736521245740554711771423492719899982357711910225545480424688322195336240492253136281857837808491795993788199125205555222116581071134476787468430539307909617442106685159519071053844987343666452494280317720153567054364117244775141336558406098548803924509496052261825198043140272655303625315605326569530252885854991822289219201218313590745412010446642247111703901991591338062693320157180618736569439969283245279430312651192668788340033626825194260296262959884258597703584888770801961209652822982322376122303586169861685106043820510444293432856251210395693261264867823980172683352796141772210301725997652373804152525037162852291403804455997331367378463632437773242905518075065414724295857460288225400061608664961649196400079359622673770607898395269075056596627116148289491042491764170924014885106158235482774778418134123293974436877051995673618683751115353808771434984204447736174758316063096245047311279841579995578186609402864244042751443128536278453430633423118662852688374229600894418958824842459450540826176452145829389286103522774101195556029650753254244433565937938526828990893149766298997738359913887178888607190765709867052470880785937935110091424743449966353497865681753841380246075612094033617488674676296822570077027076266879557913673839341012099558043806442348798053951239274913334631522409564461770434875790402230022872647568436177018658068697071731879399180374560963492726714528729224208938589940272515747888379118461617702271694075087419634147298076764775745707026934442908236664400557265527951453482191684597674273691978253678690951178777239573925410438679099374700609973920128201422381329108236575369403675960765238333778127017096574296148321075566959285042221837159799800133563239963969638610872680393210300180152020613051613414547163713772512617757277955979895866367571776456268564191092477027650135832200376440239783726540552694851717269598489288851529660975027775639565229734596726205832668434979354541943345062977891187146561050118118108223323735210843681128615413601091222007912350536959777114306541514511332368936078560929788143798814391221507522370648646767364209132147312407014953113532379838195728491128536978285918066991040993153064356179903885952027952713749653604502053512355449916680887234238773855581636172479594866871765094513940103284167914110196720261110812716776424260154507395050380575452850420730818412994731079307343538376880280124019321040198038723558784544408584344466090982802067326529000931562048932875469079874956595180595395347093285140279165467965596318365749701535812384333240968283640721344003442002691613772056762099098025739332715913970186225176459563484134139746647940170537900275350480490468851439300771949915194703080576611022590670399844931867609777417528903454731922206378932141464755402629420074293816349270038351339419146768473851353171629153912238797141905920143036064131705230421762305232861503856799511155936565169005916711845389135580928162511912438531204156138447775120789548666143600293412065767167106888509172568003530668539460588248316513392652567856224602697296203328920073354425994044956624831346979458846837597950064151867164583749203433942592178528868981311575331848941597492470436782387502687532649093096498315347403977436001399982102030846763698994785054617523241463186980898394504211430763617825306895065661536045431497903759118007934839122881885863091769469883539876840543521295706315919855784493235603866268925981702690270202829595794350800918257913991744455922683343374046671669930219650268554687499e-4951
+5.46779929782371190379260890042912972459857622354034501558147073054255753295009660521434106293874080779587102102080529665295047844893304825496026211338471350822573387176689751785383789570845033963493234384897511609341047969033029090288686119993125921652327780757456908215307313367394295878957740232139393310129853319126610211888963060953233950845785422003199631793594071800032514400843804841615045854626840829469327828294881838298175674523144370769439505327077912524046992686788101985028712502357968555779098305597496288175991948375220290368919956488030568463545206536359579198829053635210070171697414632960443922662694334080526864190176997186277619487638560405926908417212393004914459916660510317558023267203296664540665686303143487355117536394182579842533190638252470657276648523287454223056426260916178239688724389624700924406883725156778322327128669248001067971134780240835161999919912749368941130062333775184713893949842620045030584554856591000906652415254548036281829022414017017836373531792968500569736393059459388134289532878925936202911959860111289900618887987637185487890257175376747802810055833471650478460459250779148245153313351312860635744071818212363779076932092244234906632899168786207255077931639313903720118757997293301622787489850525574323330053349895193815663640653261384657614561732314168448072640907418419722475454249088439281362536533088134879943284462483896082614443915736191774429072907311631885819175882194201070472653674851414139198108859096891122440647971063242952915458929379913214790617434914900609409461282745336576821301251695869305718994035511225062977631807957323251343409893311558937242893589182127073929977680322999972072084511129714257799395078371652632557642689712118195363229932217741231347266655794602658713781865895628587618356133445842690980622757869697298305457864854014077743134149549581616770960047019414114115927554858644718705151733262444646312957015720874401831783399876629267632412206980788226617090546010735234775446535427950204682560784093064091008748868287818605298248793439879457512520813143459903135506837923488146278624413240301557305921665812510099227873245904315487345753286636286503807226030243834125646514462721175610422077384131141310997310167289350231522394313116195338483765836875091084530867301962551116953524641866782219275647577303198252230493416188536313334782412272272680845833966884362299362668540114271927670393635174916595231338524725341041244411123466156968910970701214636522586812703780765383816975942646584796378630871592938388807529281755454082628134037935686954169983885723045287488247562656656838905184226961694223388061375323047846826624482079286817404761883437391178335259163868151357930349068061174131050087191978828376147382620503202915394941049520564716066454820461766340754590215525559595903549562621278099530136795125074514242718392219467940568610559805583630337329057723569860511809664741164231921947415724386492152042297812796203704453738513487869185273997856308082426571227053818066616162711321820177977936612440784457475475356233845487698185296555392790365032340724558109915880751818176959751731101364826598545575062030580805510188732031382604511098551005267200735661262096661256044824137056119967967779273328271035688633522914992613122903551437420180422544707071078472935932052340497748391917547810304969780910060995596752409667301101676249036106564732671055561556337835940895462611076531105318082794457577243991861203875486751486321760491907016803052102243880722619748067919226364128975269527936779466226741495770848035680512429340764509429270927056845470429154903231124579718536587607255881903776664771069031066938472788476460322012930233295033487307239472187974104523339108479138928271958145518583355195189390314460933853291828207141736579466617460059018668855897329226526045739728421972311873652633819589252279700383580649872482332717064626876511433504720180433213145347598195242033084909143585968861500534066295124347881553551091005403198578135356959232734262569115529775393942099186306684666328819296619712127724446251513719534288754911396839196870087240104752172553479156988209602152172573903085602353234630969464420805480187541663697061615897052158736871663656287877965014700568701277294647143621722168024410452769115970094432811353897291302226031856656464346619476276280777232193768927273861205192875774054105101149361515027529971227502627819113726259972234152835169954792656314857994567825617347666484628496410640971818182042794985528278253841862020655169993625733881361630774771266021694104359050140770498084974090253693257957652720666502780042003578789909113749828579771084884825283544063138938642114971057650305046009822534888054745317987421433744650802400305823700866991679376510383079097061393271193254188545464782857356545416354777903469647826173542650507678783352302721948966801419867450746302258931065735595588435458411860251695316041515884813891649489148235939442871333362636803581913695403219306498244714254851377779848235254021151511710933136132513506853438248590522201268915519660183559208727757248071287690032431294868087337963504976682551164851571910118588306438983236282234720992802435831644343483470149103980044398219705082804408727593958279432709850087691435623519380914762150835481641373335418838088700191162340990134529298079501516522974364360061496849397757812346609541561544786426941760385242778104838331497986813457080891521791939794631694023406117934862723018080732675346126855938595967878668842110313414179033917498253204546635083703852518317784773110170897293611521619288153898185799835444909828917340811313123097443309606660312914517408855034585438849563676549437992646003145318154279326911078747823286547592935758034819293619617810739585020754384990706331937996993116942871832994234753398176556080587247232218670875630645576361123808295145013820732577370224728666082441643103852052135237029107871824725171250301064910318448715931417597297739077195100440493528574265929367637279694961039405916019750786028596604786141194054282128301344907317062205837882653447288187668851269775881511119842904443216489319071880803360647138732888340962292032766761198105218517261333777006163413042578229757889674721527422550419125841970454230312985062190118002401201824458385906966474162853345156310197990075156820042500608570209040122153751704798004826805544998060107661096550615074217477224611806173614025750822946789256052710835878978453907682264056485085181035257786386181957751285160739592729901482394153462634869665739345774507872436670632443783818831158272076058561748763500450868853206266693313118805937759162696436463954232205499407904769897092430274201583908061356909751493847146842199649381827199629139314649794586391855195314900094376198383063623654537548076548847041634904692964444271447785937256873584370873901519906946675162792020243324948282106576182619520385972302637994125842758516674039106573708797071810533658185026800374315600912099826417389956527932358515693723141301076471660852356156972570942691331009141357831788562803921393250013528417186104846166274481895569136218377916506998203230597087664208101335848418267186316816833817435119742641262509842148123971199782739179038898658917188367922633778880524581892387460749864560166810987228694195882740201814306527328178587284738493695393674639171713173248820998049990430544672477855920384647234422762398960664315801237564285400749454724277525689811714006217058533748758859430726006925769147904672059052723725947401879880819003174931850051429136071633807200697867867820953318408936940737783251194718335284929170810085473034145093815636178641952577515465395754614358036259938883256478835410391923683669874002630496812188314777763451185185037095888408590233797624565610306839281153499423939631856771230553247716937842149249317370437936795460514548456241502709554506083187473957557289508327546112770413596023012051385091755433135227727865041410075526919022495723751757317409236187691973046528983526943866654482600334585753232528142338680982794761667642582849114342880722431789416983473659854276969831295794960590320328412811499235180870848768851143690332277365212457405547117714234927198999823577119102255454804246883221953362404922531362818578378084917959937881991252055552221165810711344767874684305393079096174421066851595190710538449873436664524942803177201535670543641172447751413365584060985488039245094960522618251980431402726553036253156053265695302528858549918222892192012183135907454120104466422471117039019915913380626933201571806187365694399692832452794303126511926687883400336268251942602962629598842585977035848887708019612096528229823223761223035861698616851060438205104442934328562512103956932612648678239801726833527961417722103017259976523738041525250371628522914038044559973313673784636324377732429055180750654147242958574602882254000616086649616491964000793596226737706078983952690750565966271161482894910424917641709240148851061582354827747784181341232939744368770519956736186837511153538087714349842044477361747583160630962450473112798415799955781866094028642440427514431285362784534306334231186628526883742296008944189588248424594505408261764521458293892861035227741011955560296507532542444335659379385268289908931497662989977383599138871788886071907657098670524708807859379351100914247434499663534978656817538413802460756120940336174886746762968225700770270762668795579136738393410120995580438064423487980539512392749133346315224095644617704348757904022300228726475684361770186580686970717318793991803745609634927267145287292242089385899402725157478883791184616177022716940750874196341472980767647757457070269344429082366644005572655279514534821916845976742736919782536786909511787772395739254104386790993747006099739201282014223813291082365753694036759607652383337781270170965742961483210755669592850422218371597998001335632399639696386108726803932103001801520206130516134145471637137725126177572779559798958663675717764562685641910924770276501358322003764402397837265405526948517172695984892888515296609750277756395652297345967262058326684349793545419433450629778911871465610501181181082233237352108436811286154136010912220079123505369597771143065415145113323689360785609297881437988143912215075223706486467673642091321473124070149531135323798381957284911285369782859180669910409931530643561799038859520279527137496536045020535123554499166808872342387738555816361724795948668717650945139401032841679141101967202611108127167764242601545073950503805754528504207308184129947310793073435383768802801240193210401980387235587845444085843444660909828020673265290009315620489328754690798749565951805953953470932851402791654679655963183657497015358123843332409682836407213440034420026916137720567620990980257393327159139701862251764595634841341397466479401705379002753504804904688514393007719499151947030805766110225906703998449318676097774175289034547319222063789321414647554026294200742938163492700383513394191467684738513531716291539122387971419059201430360641317052304217623052328615038567995111559365651690059167118453891355809281625119124385312041561384477751207895486661436002934120657671671068885091725680035306685394605882483165133926525678562246026972962033289200733544259940449566248313469794588468375979500641518671645837492034339425921785288689813115753318489415974924704367823875026875326490930964983153474039774360013999821020308467636989947850546175232414631869808983945042114307636178253068950656615360454314979037591180079348391228818858630917694698835398768405435212957063159198557844932356038662689259817026902702028295957943508009182579139917444559226833433740466716699302196502685546875e-4951
+5.4677992978237119037926089004291297245985762235403450155814707305425575329500966052143410629387408077958710210208052966529504784489330482549602621133847135082257338717668975178538378957084503396349323438489751160934104796903302909028868611999312592165232778075745690821530731336739429587895774023213939331012985331912661021188896306095323395084578542200319963179359407180003251440084380484161504585462684082946932782829488183829817567452314437076943950532707791252404699268678810198502871250235796855577909830559749628817599194837522029036891995648803056846354520653635957919882905363521007017169741463296044392266269433408052686419017699718627761948763856040592690841721239300491445991666051031755802326720329666454066568630314348735511753639418257984253319063825247065727664852328745422305642626091617823968872438962470092440688372515677832232712866924800106797113478024083516199991991274936894113006233377518471389394984262004503058455485659100090665241525454803628182902241401701783637353179296850056973639305945938813428953287892593620291195986011128990061888798763718548789025717537674780281005583347165047846045925077914824515331335131286063574407181821236377907693209224423490663289916878620725507793163931390372011875799729330162278748985052557432333005334989519381566364065326138465761456173231416844807264090741841972247545424908843928136253653308813487994328446248389608261444391573619177442907290731163188581917588219420107047265367485141413919810885909689112244064797106324295291545892937991321479061743491490060940946128274533657682130125169586930571899403551122506297763180795732325134340989331155893724289358918212707392997768032299997207208451112971425779939507837165263255764268971211819536322993221774123134726665579460265871378186589562858761835613344584269098062275786969729830545786485401407774313414954958161677096004701941411411592755485864471870515173326244464631295701572087440183178339987662926763241220698078822661709054601073523477544653542795020468256078409306409100874886828781860529824879343987945751252081314345990313550683792348814627862441324030155730592166581251009922787324590431548734575328663628650380722603024383412564651446272117561042207738413114131099731016728935023152239431311619533848376583687509108453086730196255111695352464186678221927564757730319825223049341618853631333478241227227268084583396688436229936266854011427192767039363517491659523133852472534104124441112346615696891097070121463652258681270378076538381697594264658479637863087159293838880752928175545408262813403793568695416998388572304528748824756265665683890518422696169422338806137532304784682662448207928681740476188343739117833525916386815135793034906806117413105008719197882837614738262050320291539494104952056471606645482046176634075459021552555959590354956262127809953013679512507451424271839221946794056861055980558363033732905772356986051180966474116423192194741572438649215204229781279620370445373851348786918527399785630808242657122705381806661616271132182017797793661244078445747547535623384548769818529655539279036503234072455810991588075181817695975173110136482659854557506203058080551018873203138260451109855100526720073566126209666125604482413705611996796777927332827103568863352291499261312290355143742018042254470707107847293593205234049774839191754781030496978091006099559675240966730110167624903610656473267105556155633783594089546261107653110531808279445757724399186120387548675148632176049190701680305210224388072261974806791922636412897526952793677946622674149577084803568051242934076450942927092705684547042915490323112457971853658760725588190377666477106903106693847278847646032201293023329503348730723947218797410452333910847913892827195814551858335519518939031446093385329182820714173657946661746005901866885589732922652604573972842197231187365263381958925227970038358064987248233271706462687651143350472018043321314534759819524203308490914358596886150053406629512434788155355109100540319857813535695923273426256911552977539394209918630668466632881929661971212772444625151371953428875491139683919687008724010475217255347915698820960215217257390308560235323463096946442080548018754166369706161589705215873687166365628787796501470056870127729464714362172216802441045276911597009443281135389729130222603185665646434661947627628077723219376892727386120519287577405410510114936151502752997122750262781911372625997223415283516995479265631485799456782561734766648462849641064097181818204279498552827825384186202065516999362573388136163077477126602169410435905014077049808497409025369325795765272066650278004200357878990911374982857977108488482528354406313893864211497105765030504600982253488805474531798742143374465080240030582370086699167937651038307909706139327119325418854546478285735654541635477790346964782617354265050767878335230272194896680141986745074630225893106573559558843545841186025169531604151588481389164948914823593944287133336263680358191369540321930649824471425485137777984823525402115151171093313613251350685343824859052220126891551966018355920872775724807128769003243129486808733796350497668255116485157191011858830643898323628223472099280243583164434348347014910398004439821970508280440872759395827943270985008769143562351938091476215083548164137333541883808870019116234099013452929807950151652297436436006149684939775781234660954156154478642694176038524277810483833149798681345708089152179193979463169402340611793486272301808073267534612685593859596787866884211031341417903391749825320454663508370385251831778477311017089729361152161928815389818579983544490982891734081131312309744330960666031291451740885503458543884956367654943799264600314531815427932691107874782328654759293575803481929361961781073958502075438499070633193799699311694287183299423475339817655608058724723221867087563064557636112380829514501382073257737022472866608244164310385205213523702910787182472517125030106491031844871593141759729773907719510044049352857426592936763727969496103940591601975078602859660478614119405428212830134490731706220583788265344728818766885126977588151111984290444321648931907188080336064713873288834096229203276676119810521851726133377700616341304257822975788967472152742255041912584197045423031298506219011800240120182445838590696647416285334515631019799007515682004250060857020904012215375170479800482680554499806010766109655061507421747722461180617361402575082294678925605271083587897845390768226405648508518103525778638618195775128516073959272990148239415346263486966573934577450787243667063244378381883115827207605856174876350045086885320626669331311880593775916269643646395423220549940790476989709243027420158390806135690975149384714684219964938182719962913931464979458639185519531490009437619838306362365453754807654884704163490469296444427144778593725687358437087390151990694667516279202024332494828210657618261952038597230263799412584275851667403910657370879707181053365818502680037431560091209982641738995652793235851569372314130107647166085235615697257094269133100914135783178856280392139325001352841718610484616627448189556913621837791650699820323059708766420810133584841826718631681683381743511974264126250984214812397119978273917903889865891718836792263377888052458189238746074986456016681098722869419588274020181430652732817858728473849369539367463917171317324882099804999043054467247785592038464723442276239896066431580123756428540074945472427752568981171400621705853374875885943072600692576914790467205905272372594740187988081900317493185005142913607163380720069786786782095331840893694073778325119471833528492917081008547303414509381563617864195257751546539575461435803625993888325647883541039192368366987400263049681218831477776345118518503709588840859023379762456561030683928115349942393963185677123055324771693784214924931737043793679546051454845624150270955450608318747395755728950832754611277041359602301205138509175543313522772786504141007552691902249572375175731740923618769197304652898352694386665448260033458575323252814233868098279476166764258284911434288072243178941698347365985427696983129579496059032032841281149923518087084876885114369033227736521245740554711771423492719899982357711910225545480424688322195336240492253136281857837808491795993788199125205555222116581071134476787468430539307909617442106685159519071053844987343666452494280317720153567054364117244775141336558406098548803924509496052261825198043140272655303625315605326569530252885854991822289219201218313590745412010446642247111703901991591338062693320157180618736569439969283245279430312651192668788340033626825194260296262959884258597703584888770801961209652822982322376122303586169861685106043820510444293432856251210395693261264867823980172683352796141772210301725997652373804152525037162852291403804455997331367378463632437773242905518075065414724295857460288225400061608664961649196400079359622673770607898395269075056596627116148289491042491764170924014885106158235482774778418134123293974436877051995673618683751115353808771434984204447736174758316063096245047311279841579995578186609402864244042751443128536278453430633423118662852688374229600894418958824842459450540826176452145829389286103522774101195556029650753254244433565937938526828990893149766298997738359913887178888607190765709867052470880785937935110091424743449966353497865681753841380246075612094033617488674676296822570077027076266879557913673839341012099558043806442348798053951239274913334631522409564461770434875790402230022872647568436177018658068697071731879399180374560963492726714528729224208938589940272515747888379118461617702271694075087419634147298076764775745707026934442908236664400557265527951453482191684597674273691978253678690951178777239573925410438679099374700609973920128201422381329108236575369403675960765238333778127017096574296148321075566959285042221837159799800133563239963969638610872680393210300180152020613051613414547163713772512617757277955979895866367571776456268564191092477027650135832200376440239783726540552694851717269598489288851529660975027775639565229734596726205832668434979354541943345062977891187146561050118118108223323735210843681128615413601091222007912350536959777114306541514511332368936078560929788143798814391221507522370648646767364209132147312407014953113532379838195728491128536978285918066991040993153064356179903885952027952713749653604502053512355449916680887234238773855581636172479594866871765094513940103284167914110196720261110812716776424260154507395050380575452850420730818412994731079307343538376880280124019321040198038723558784544408584344466090982802067326529000931562048932875469079874956595180595395347093285140279165467965596318365749701535812384333240968283640721344003442002691613772056762099098025739332715913970186225176459563484134139746647940170537900275350480490468851439300771949915194703080576611022590670399844931867609777417528903454731922206378932141464755402629420074293816349270038351339419146768473851353171629153912238797141905920143036064131705230421762305232861503856799511155936565169005916711845389135580928162511912438531204156138447775120789548666143600293412065767167106888509172568003530668539460588248316513392652567856224602697296203328920073354425994044956624831346979458846837597950064151867164583749203433942592178528868981311575331848941597492470436782387502687532649093096498315347403977436001399982102030846763698994785054617523241463186980898394504211430763617825306895065661536045431497903759118007934839122881885863091769469883539876840543521295706315919855784493235603866268925981702690270202829595794350800918257913991744455922683343374046671669930219650268554687501e-4951
+-5.4677992978237119037926089004291297245985762235403450155814707305425575329500966052143410629387408077958710210208052966529504784489330482549602621133847135082257338717668975178538378957084503396349323438489751160934104796903302909028868611999312592165232778075745690821530731336739429587895774023213939331012985331912661021188896306095323395084578542200319963179359407180003251440084380484161504585462684082946932782829488183829817567452314437076943950532707791252404699268678810198502871250235796855577909830559749628817599194837522029036891995648803056846354520653635957919882905363521007017169741463296044392266269433408052686419017699718627761948763856040592690841721239300491445991666051031755802326720329666454066568630314348735511753639418257984253319063825247065727664852328745422305642626091617823968872438962470092440688372515677832232712866924800106797113478024083516199991991274936894113006233377518471389394984262004503058455485659100090665241525454803628182902241401701783637353179296850056973639305945938813428953287892593620291195986011128990061888798763718548789025717537674780281005583347165047846045925077914824515331335131286063574407181821236377907693209224423490663289916878620725507793163931390372011875799729330162278748985052557432333005334989519381566364065326138465761456173231416844807264090741841972247545424908843928136253653308813487994328446248389608261444391573619177442907290731163188581917588219420107047265367485141413919810885909689112244064797106324295291545892937991321479061743491490060940946128274533657682130125169586930571899403551122506297763180795732325134340989331155893724289358918212707392997768032299997207208451112971425779939507837165263255764268971211819536322993221774123134726665579460265871378186589562858761835613344584269098062275786969729830545786485401407774313414954958161677096004701941411411592755485864471870515173326244464631295701572087440183178339987662926763241220698078822661709054601073523477544653542795020468256078409306409100874886828781860529824879343987945751252081314345990313550683792348814627862441324030155730592166581251009922787324590431548734575328663628650380722603024383412564651446272117561042207738413114131099731016728935023152239431311619533848376583687509108453086730196255111695352464186678221927564757730319825223049341618853631333478241227227268084583396688436229936266854011427192767039363517491659523133852472534104124441112346615696891097070121463652258681270378076538381697594264658479637863087159293838880752928175545408262813403793568695416998388572304528748824756265665683890518422696169422338806137532304784682662448207928681740476188343739117833525916386815135793034906806117413105008719197882837614738262050320291539494104952056471606645482046176634075459021552555959590354956262127809953013679512507451424271839221946794056861055980558363033732905772356986051180966474116423192194741572438649215204229781279620370445373851348786918527399785630808242657122705381806661616271132182017797793661244078445747547535623384548769818529655539279036503234072455810991588075181817695975173110136482659854557506203058080551018873203138260451109855100526720073566126209666125604482413705611996796777927332827103568863352291499261312290355143742018042254470707107847293593205234049774839191754781030496978091006099559675240966730110167624903610656473267105556155633783594089546261107653110531808279445757724399186120387548675148632176049190701680305210224388072261974806791922636412897526952793677946622674149577084803568051242934076450942927092705684547042915490323112457971853658760725588190377666477106903106693847278847646032201293023329503348730723947218797410452333910847913892827195814551858335519518939031446093385329182820714173657946661746005901866885589732922652604573972842197231187365263381958925227970038358064987248233271706462687651143350472018043321314534759819524203308490914358596886150053406629512434788155355109100540319857813535695923273426256911552977539394209918630668466632881929661971212772444625151371953428875491139683919687008724010475217255347915698820960215217257390308560235323463096946442080548018754166369706161589705215873687166365628787796501470056870127729464714362172216802441045276911597009443281135389729130222603185665646434661947627628077723219376892727386120519287577405410510114936151502752997122750262781911372625997223415283516995479265631485799456782561734766648462849641064097181818204279498552827825384186202065516999362573388136163077477126602169410435905014077049808497409025369325795765272066650278004200357878990911374982857977108488482528354406313893864211497105765030504600982253488805474531798742143374465080240030582370086699167937651038307909706139327119325418854546478285735654541635477790346964782617354265050767878335230272194896680141986745074630225893106573559558843545841186025169531604151588481389164948914823593944287133336263680358191369540321930649824471425485137777984823525402115151171093313613251350685343824859052220126891551966018355920872775724807128769003243129486808733796350497668255116485157191011858830643898323628223472099280243583164434348347014910398004439821970508280440872759395827943270985008769143562351938091476215083548164137333541883808870019116234099013452929807950151652297436436006149684939775781234660954156154478642694176038524277810483833149798681345708089152179193979463169402340611793486272301808073267534612685593859596787866884211031341417903391749825320454663508370385251831778477311017089729361152161928815389818579983544490982891734081131312309744330960666031291451740885503458543884956367654943799264600314531815427932691107874782328654759293575803481929361961781073958502075438499070633193799699311694287183299423475339817655608058724723221867087563064557636112380829514501382073257737022472866608244164310385205213523702910787182472517125030106491031844871593141759729773907719510044049352857426592936763727969496103940591601975078602859660478614119405428212830134490731706220583788265344728818766885126977588151111984290444321648931907188080336064713873288834096229203276676119810521851726133377700616341304257822975788967472152742255041912584197045423031298506219011800240120182445838590696647416285334515631019799007515682004250060857020904012215375170479800482680554499806010766109655061507421747722461180617361402575082294678925605271083587897845390768226405648508518103525778638618195775128516073959272990148239415346263486966573934577450787243667063244378381883115827207605856174876350045086885320626669331311880593775916269643646395423220549940790476989709243027420158390806135690975149384714684219964938182719962913931464979458639185519531490009437619838306362365453754807654884704163490469296444427144778593725687358437087390151990694667516279202024332494828210657618261952038597230263799412584275851667403910657370879707181053365818502680037431560091209982641738995652793235851569372314130107647166085235615697257094269133100914135783178856280392139325001352841718610484616627448189556913621837791650699820323059708766420810133584841826718631681683381743511974264126250984214812397119978273917903889865891718836792263377888052458189238746074986456016681098722869419588274020181430652732817858728473849369539367463917171317324882099804999043054467247785592038464723442276239896066431580123756428540074945472427752568981171400621705853374875885943072600692576914790467205905272372594740187988081900317493185005142913607163380720069786786782095331840893694073778325119471833528492917081008547303414509381563617864195257751546539575461435803625993888325647883541039192368366987400263049681218831477776345118518503709588840859023379762456561030683928115349942393963185677123055324771693784214924931737043793679546051454845624150270955450608318747395755728950832754611277041359602301205138509175543313522772786504141007552691902249572375175731740923618769197304652898352694386665448260033458575323252814233868098279476166764258284911434288072243178941698347365985427696983129579496059032032841281149923518087084876885114369033227736521245740554711771423492719899982357711910225545480424688322195336240492253136281857837808491795993788199125205555222116581071134476787468430539307909617442106685159519071053844987343666452494280317720153567054364117244775141336558406098548803924509496052261825198043140272655303625315605326569530252885854991822289219201218313590745412010446642247111703901991591338062693320157180618736569439969283245279430312651192668788340033626825194260296262959884258597703584888770801961209652822982322376122303586169861685106043820510444293432856251210395693261264867823980172683352796141772210301725997652373804152525037162852291403804455997331367378463632437773242905518075065414724295857460288225400061608664961649196400079359622673770607898395269075056596627116148289491042491764170924014885106158235482774778418134123293974436877051995673618683751115353808771434984204447736174758316063096245047311279841579995578186609402864244042751443128536278453430633423118662852688374229600894418958824842459450540826176452145829389286103522774101195556029650753254244433565937938526828990893149766298997738359913887178888607190765709867052470880785937935110091424743449966353497865681753841380246075612094033617488674676296822570077027076266879557913673839341012099558043806442348798053951239274913334631522409564461770434875790402230022872647568436177018658068697071731879399180374560963492726714528729224208938589940272515747888379118461617702271694075087419634147298076764775745707026934442908236664400557265527951453482191684597674273691978253678690951178777239573925410438679099374700609973920128201422381329108236575369403675960765238333778127017096574296148321075566959285042221837159799800133563239963969638610872680393210300180152020613051613414547163713772512617757277955979895866367571776456268564191092477027650135832200376440239783726540552694851717269598489288851529660975027775639565229734596726205832668434979354541943345062977891187146561050118118108223323735210843681128615413601091222007912350536959777114306541514511332368936078560929788143798814391221507522370648646767364209132147312407014953113532379838195728491128536978285918066991040993153064356179903885952027952713749653604502053512355449916680887234238773855581636172479594866871765094513940103284167914110196720261110812716776424260154507395050380575452850420730818412994731079307343538376880280124019321040198038723558784544408584344466090982802067326529000931562048932875469079874956595180595395347093285140279165467965596318365749701535812384333240968283640721344003442002691613772056762099098025739332715913970186225176459563484134139746647940170537900275350480490468851439300771949915194703080576611022590670399844931867609777417528903454731922206378932141464755402629420074293816349270038351339419146768473851353171629153912238797141905920143036064131705230421762305232861503856799511155936565169005916711845389135580928162511912438531204156138447775120789548666143600293412065767167106888509172568003530668539460588248316513392652567856224602697296203328920073354425994044956624831346979458846837597950064151867164583749203433942592178528868981311575331848941597492470436782387502687532649093096498315347403977436001399982102030846763698994785054617523241463186980898394504211430763617825306895065661536045431497903759118007934839122881885863091769469883539876840543521295706315919855784493235603866268925981702690270202829595794350800918257913991744455922683343374046671669930219650268554687499e-4951
+-5.46779929782371190379260890042912972459857622354034501558147073054255753295009660521434106293874080779587102102080529665295047844893304825496026211338471350822573387176689751785383789570845033963493234384897511609341047969033029090288686119993125921652327780757456908215307313367394295878957740232139393310129853319126610211888963060953233950845785422003199631793594071800032514400843804841615045854626840829469327828294881838298175674523144370769439505327077912524046992686788101985028712502357968555779098305597496288175991948375220290368919956488030568463545206536359579198829053635210070171697414632960443922662694334080526864190176997186277619487638560405926908417212393004914459916660510317558023267203296664540665686303143487355117536394182579842533190638252470657276648523287454223056426260916178239688724389624700924406883725156778322327128669248001067971134780240835161999919912749368941130062333775184713893949842620045030584554856591000906652415254548036281829022414017017836373531792968500569736393059459388134289532878925936202911959860111289900618887987637185487890257175376747802810055833471650478460459250779148245153313351312860635744071818212363779076932092244234906632899168786207255077931639313903720118757997293301622787489850525574323330053349895193815663640653261384657614561732314168448072640907418419722475454249088439281362536533088134879943284462483896082614443915736191774429072907311631885819175882194201070472653674851414139198108859096891122440647971063242952915458929379913214790617434914900609409461282745336576821301251695869305718994035511225062977631807957323251343409893311558937242893589182127073929977680322999972072084511129714257799395078371652632557642689712118195363229932217741231347266655794602658713781865895628587618356133445842690980622757869697298305457864854014077743134149549581616770960047019414114115927554858644718705151733262444646312957015720874401831783399876629267632412206980788226617090546010735234775446535427950204682560784093064091008748868287818605298248793439879457512520813143459903135506837923488146278624413240301557305921665812510099227873245904315487345753286636286503807226030243834125646514462721175610422077384131141310997310167289350231522394313116195338483765836875091084530867301962551116953524641866782219275647577303198252230493416188536313334782412272272680845833966884362299362668540114271927670393635174916595231338524725341041244411123466156968910970701214636522586812703780765383816975942646584796378630871592938388807529281755454082628134037935686954169983885723045287488247562656656838905184226961694223388061375323047846826624482079286817404761883437391178335259163868151357930349068061174131050087191978828376147382620503202915394941049520564716066454820461766340754590215525559595903549562621278099530136795125074514242718392219467940568610559805583630337329057723569860511809664741164231921947415724386492152042297812796203704453738513487869185273997856308082426571227053818066616162711321820177977936612440784457475475356233845487698185296555392790365032340724558109915880751818176959751731101364826598545575062030580805510188732031382604511098551005267200735661262096661256044824137056119967967779273328271035688633522914992613122903551437420180422544707071078472935932052340497748391917547810304969780910060995596752409667301101676249036106564732671055561556337835940895462611076531105318082794457577243991861203875486751486321760491907016803052102243880722619748067919226364128975269527936779466226741495770848035680512429340764509429270927056845470429154903231124579718536587607255881903776664771069031066938472788476460322012930233295033487307239472187974104523339108479138928271958145518583355195189390314460933853291828207141736579466617460059018668855897329226526045739728421972311873652633819589252279700383580649872482332717064626876511433504720180433213145347598195242033084909143585968861500534066295124347881553551091005403198578135356959232734262569115529775393942099186306684666328819296619712127724446251513719534288754911396839196870087240104752172553479156988209602152172573903085602353234630969464420805480187541663697061615897052158736871663656287877965014700568701277294647143621722168024410452769115970094432811353897291302226031856656464346619476276280777232193768927273861205192875774054105101149361515027529971227502627819113726259972234152835169954792656314857994567825617347666484628496410640971818182042794985528278253841862020655169993625733881361630774771266021694104359050140770498084974090253693257957652720666502780042003578789909113749828579771084884825283544063138938642114971057650305046009822534888054745317987421433744650802400305823700866991679376510383079097061393271193254188545464782857356545416354777903469647826173542650507678783352302721948966801419867450746302258931065735595588435458411860251695316041515884813891649489148235939442871333362636803581913695403219306498244714254851377779848235254021151511710933136132513506853438248590522201268915519660183559208727757248071287690032431294868087337963504976682551164851571910118588306438983236282234720992802435831644343483470149103980044398219705082804408727593958279432709850087691435623519380914762150835481641373335418838088700191162340990134529298079501516522974364360061496849397757812346609541561544786426941760385242778104838331497986813457080891521791939794631694023406117934862723018080732675346126855938595967878668842110313414179033917498253204546635083703852518317784773110170897293611521619288153898185799835444909828917340811313123097443309606660312914517408855034585438849563676549437992646003145318154279326911078747823286547592935758034819293619617810739585020754384990706331937996993116942871832994234753398176556080587247232218670875630645576361123808295145013820732577370224728666082441643103852052135237029107871824725171250301064910318448715931417597297739077195100440493528574265929367637279694961039405916019750786028596604786141194054282128301344907317062205837882653447288187668851269775881511119842904443216489319071880803360647138732888340962292032766761198105218517261333777006163413042578229757889674721527422550419125841970454230312985062190118002401201824458385906966474162853345156310197990075156820042500608570209040122153751704798004826805544998060107661096550615074217477224611806173614025750822946789256052710835878978453907682264056485085181035257786386181957751285160739592729901482394153462634869665739345774507872436670632443783818831158272076058561748763500450868853206266693313118805937759162696436463954232205499407904769897092430274201583908061356909751493847146842199649381827199629139314649794586391855195314900094376198383063623654537548076548847041634904692964444271447785937256873584370873901519906946675162792020243324948282106576182619520385972302637994125842758516674039106573708797071810533658185026800374315600912099826417389956527932358515693723141301076471660852356156972570942691331009141357831788562803921393250013528417186104846166274481895569136218377916506998203230597087664208101335848418267186316816833817435119742641262509842148123971199782739179038898658917188367922633778880524581892387460749864560166810987228694195882740201814306527328178587284738493695393674639171713173248820998049990430544672477855920384647234422762398960664315801237564285400749454724277525689811714006217058533748758859430726006925769147904672059052723725947401879880819003174931850051429136071633807200697867867820953318408936940737783251194718335284929170810085473034145093815636178641952577515465395754614358036259938883256478835410391923683669874002630496812188314777763451185185037095888408590233797624565610306839281153499423939631856771230553247716937842149249317370437936795460514548456241502709554506083187473957557289508327546112770413596023012051385091755433135227727865041410075526919022495723751757317409236187691973046528983526943866654482600334585753232528142338680982794761667642582849114342880722431789416983473659854276969831295794960590320328412811499235180870848768851143690332277365212457405547117714234927198999823577119102255454804246883221953362404922531362818578378084917959937881991252055552221165810711344767874684305393079096174421066851595190710538449873436664524942803177201535670543641172447751413365584060985488039245094960522618251980431402726553036253156053265695302528858549918222892192012183135907454120104466422471117039019915913380626933201571806187365694399692832452794303126511926687883400336268251942602962629598842585977035848887708019612096528229823223761223035861698616851060438205104442934328562512103956932612648678239801726833527961417722103017259976523738041525250371628522914038044559973313673784636324377732429055180750654147242958574602882254000616086649616491964000793596226737706078983952690750565966271161482894910424917641709240148851061582354827747784181341232939744368770519956736186837511153538087714349842044477361747583160630962450473112798415799955781866094028642440427514431285362784534306334231186628526883742296008944189588248424594505408261764521458293892861035227741011955560296507532542444335659379385268289908931497662989977383599138871788886071907657098670524708807859379351100914247434499663534978656817538413802460756120940336174886746762968225700770270762668795579136738393410120995580438064423487980539512392749133346315224095644617704348757904022300228726475684361770186580686970717318793991803745609634927267145287292242089385899402725157478883791184616177022716940750874196341472980767647757457070269344429082366644005572655279514534821916845976742736919782536786909511787772395739254104386790993747006099739201282014223813291082365753694036759607652383337781270170965742961483210755669592850422218371597998001335632399639696386108726803932103001801520206130516134145471637137725126177572779559798958663675717764562685641910924770276501358322003764402397837265405526948517172695984892888515296609750277756395652297345967262058326684349793545419433450629778911871465610501181181082233237352108436811286154136010912220079123505369597771143065415145113323689360785609297881437988143912215075223706486467673642091321473124070149531135323798381957284911285369782859180669910409931530643561799038859520279527137496536045020535123554499166808872342387738555816361724795948668717650945139401032841679141101967202611108127167764242601545073950503805754528504207308184129947310793073435383768802801240193210401980387235587845444085843444660909828020673265290009315620489328754690798749565951805953953470932851402791654679655963183657497015358123843332409682836407213440034420026916137720567620990980257393327159139701862251764595634841341397466479401705379002753504804904688514393007719499151947030805766110225906703998449318676097774175289034547319222063789321414647554026294200742938163492700383513394191467684738513531716291539122387971419059201430360641317052304217623052328615038567995111559365651690059167118453891355809281625119124385312041561384477751207895486661436002934120657671671068885091725680035306685394605882483165133926525678562246026972962033289200733544259940449566248313469794588468375979500641518671645837492034339425921785288689813115753318489415974924704367823875026875326490930964983153474039774360013999821020308467636989947850546175232414631869808983945042114307636178253068950656615360454314979037591180079348391228818858630917694698835398768405435212957063159198557844932356038662689259817026902702028295957943508009182579139917444559226833433740466716699302196502685546875e-4951
+-5.4677992978237119037926089004291297245985762235403450155814707305425575329500966052143410629387408077958710210208052966529504784489330482549602621133847135082257338717668975178538378957084503396349323438489751160934104796903302909028868611999312592165232778075745690821530731336739429587895774023213939331012985331912661021188896306095323395084578542200319963179359407180003251440084380484161504585462684082946932782829488183829817567452314437076943950532707791252404699268678810198502871250235796855577909830559749628817599194837522029036891995648803056846354520653635957919882905363521007017169741463296044392266269433408052686419017699718627761948763856040592690841721239300491445991666051031755802326720329666454066568630314348735511753639418257984253319063825247065727664852328745422305642626091617823968872438962470092440688372515677832232712866924800106797113478024083516199991991274936894113006233377518471389394984262004503058455485659100090665241525454803628182902241401701783637353179296850056973639305945938813428953287892593620291195986011128990061888798763718548789025717537674780281005583347165047846045925077914824515331335131286063574407181821236377907693209224423490663289916878620725507793163931390372011875799729330162278748985052557432333005334989519381566364065326138465761456173231416844807264090741841972247545424908843928136253653308813487994328446248389608261444391573619177442907290731163188581917588219420107047265367485141413919810885909689112244064797106324295291545892937991321479061743491490060940946128274533657682130125169586930571899403551122506297763180795732325134340989331155893724289358918212707392997768032299997207208451112971425779939507837165263255764268971211819536322993221774123134726665579460265871378186589562858761835613344584269098062275786969729830545786485401407774313414954958161677096004701941411411592755485864471870515173326244464631295701572087440183178339987662926763241220698078822661709054601073523477544653542795020468256078409306409100874886828781860529824879343987945751252081314345990313550683792348814627862441324030155730592166581251009922787324590431548734575328663628650380722603024383412564651446272117561042207738413114131099731016728935023152239431311619533848376583687509108453086730196255111695352464186678221927564757730319825223049341618853631333478241227227268084583396688436229936266854011427192767039363517491659523133852472534104124441112346615696891097070121463652258681270378076538381697594264658479637863087159293838880752928175545408262813403793568695416998388572304528748824756265665683890518422696169422338806137532304784682662448207928681740476188343739117833525916386815135793034906806117413105008719197882837614738262050320291539494104952056471606645482046176634075459021552555959590354956262127809953013679512507451424271839221946794056861055980558363033732905772356986051180966474116423192194741572438649215204229781279620370445373851348786918527399785630808242657122705381806661616271132182017797793661244078445747547535623384548769818529655539279036503234072455810991588075181817695975173110136482659854557506203058080551018873203138260451109855100526720073566126209666125604482413705611996796777927332827103568863352291499261312290355143742018042254470707107847293593205234049774839191754781030496978091006099559675240966730110167624903610656473267105556155633783594089546261107653110531808279445757724399186120387548675148632176049190701680305210224388072261974806791922636412897526952793677946622674149577084803568051242934076450942927092705684547042915490323112457971853658760725588190377666477106903106693847278847646032201293023329503348730723947218797410452333910847913892827195814551858335519518939031446093385329182820714173657946661746005901866885589732922652604573972842197231187365263381958925227970038358064987248233271706462687651143350472018043321314534759819524203308490914358596886150053406629512434788155355109100540319857813535695923273426256911552977539394209918630668466632881929661971212772444625151371953428875491139683919687008724010475217255347915698820960215217257390308560235323463096946442080548018754166369706161589705215873687166365628787796501470056870127729464714362172216802441045276911597009443281135389729130222603185665646434661947627628077723219376892727386120519287577405410510114936151502752997122750262781911372625997223415283516995479265631485799456782561734766648462849641064097181818204279498552827825384186202065516999362573388136163077477126602169410435905014077049808497409025369325795765272066650278004200357878990911374982857977108488482528354406313893864211497105765030504600982253488805474531798742143374465080240030582370086699167937651038307909706139327119325418854546478285735654541635477790346964782617354265050767878335230272194896680141986745074630225893106573559558843545841186025169531604151588481389164948914823593944287133336263680358191369540321930649824471425485137777984823525402115151171093313613251350685343824859052220126891551966018355920872775724807128769003243129486808733796350497668255116485157191011858830643898323628223472099280243583164434348347014910398004439821970508280440872759395827943270985008769143562351938091476215083548164137333541883808870019116234099013452929807950151652297436436006149684939775781234660954156154478642694176038524277810483833149798681345708089152179193979463169402340611793486272301808073267534612685593859596787866884211031341417903391749825320454663508370385251831778477311017089729361152161928815389818579983544490982891734081131312309744330960666031291451740885503458543884956367654943799264600314531815427932691107874782328654759293575803481929361961781073958502075438499070633193799699311694287183299423475339817655608058724723221867087563064557636112380829514501382073257737022472866608244164310385205213523702910787182472517125030106491031844871593141759729773907719510044049352857426592936763727969496103940591601975078602859660478614119405428212830134490731706220583788265344728818766885126977588151111984290444321648931907188080336064713873288834096229203276676119810521851726133377700616341304257822975788967472152742255041912584197045423031298506219011800240120182445838590696647416285334515631019799007515682004250060857020904012215375170479800482680554499806010766109655061507421747722461180617361402575082294678925605271083587897845390768226405648508518103525778638618195775128516073959272990148239415346263486966573934577450787243667063244378381883115827207605856174876350045086885320626669331311880593775916269643646395423220549940790476989709243027420158390806135690975149384714684219964938182719962913931464979458639185519531490009437619838306362365453754807654884704163490469296444427144778593725687358437087390151990694667516279202024332494828210657618261952038597230263799412584275851667403910657370879707181053365818502680037431560091209982641738995652793235851569372314130107647166085235615697257094269133100914135783178856280392139325001352841718610484616627448189556913621837791650699820323059708766420810133584841826718631681683381743511974264126250984214812397119978273917903889865891718836792263377888052458189238746074986456016681098722869419588274020181430652732817858728473849369539367463917171317324882099804999043054467247785592038464723442276239896066431580123756428540074945472427752568981171400621705853374875885943072600692576914790467205905272372594740187988081900317493185005142913607163380720069786786782095331840893694073778325119471833528492917081008547303414509381563617864195257751546539575461435803625993888325647883541039192368366987400263049681218831477776345118518503709588840859023379762456561030683928115349942393963185677123055324771693784214924931737043793679546051454845624150270955450608318747395755728950832754611277041359602301205138509175543313522772786504141007552691902249572375175731740923618769197304652898352694386665448260033458575323252814233868098279476166764258284911434288072243178941698347365985427696983129579496059032032841281149923518087084876885114369033227736521245740554711771423492719899982357711910225545480424688322195336240492253136281857837808491795993788199125205555222116581071134476787468430539307909617442106685159519071053844987343666452494280317720153567054364117244775141336558406098548803924509496052261825198043140272655303625315605326569530252885854991822289219201218313590745412010446642247111703901991591338062693320157180618736569439969283245279430312651192668788340033626825194260296262959884258597703584888770801961209652822982322376122303586169861685106043820510444293432856251210395693261264867823980172683352796141772210301725997652373804152525037162852291403804455997331367378463632437773242905518075065414724295857460288225400061608664961649196400079359622673770607898395269075056596627116148289491042491764170924014885106158235482774778418134123293974436877051995673618683751115353808771434984204447736174758316063096245047311279841579995578186609402864244042751443128536278453430633423118662852688374229600894418958824842459450540826176452145829389286103522774101195556029650753254244433565937938526828990893149766298997738359913887178888607190765709867052470880785937935110091424743449966353497865681753841380246075612094033617488674676296822570077027076266879557913673839341012099558043806442348798053951239274913334631522409564461770434875790402230022872647568436177018658068697071731879399180374560963492726714528729224208938589940272515747888379118461617702271694075087419634147298076764775745707026934442908236664400557265527951453482191684597674273691978253678690951178777239573925410438679099374700609973920128201422381329108236575369403675960765238333778127017096574296148321075566959285042221837159799800133563239963969638610872680393210300180152020613051613414547163713772512617757277955979895866367571776456268564191092477027650135832200376440239783726540552694851717269598489288851529660975027775639565229734596726205832668434979354541943345062977891187146561050118118108223323735210843681128615413601091222007912350536959777114306541514511332368936078560929788143798814391221507522370648646767364209132147312407014953113532379838195728491128536978285918066991040993153064356179903885952027952713749653604502053512355449916680887234238773855581636172479594866871765094513940103284167914110196720261110812716776424260154507395050380575452850420730818412994731079307343538376880280124019321040198038723558784544408584344466090982802067326529000931562048932875469079874956595180595395347093285140279165467965596318365749701535812384333240968283640721344003442002691613772056762099098025739332715913970186225176459563484134139746647940170537900275350480490468851439300771949915194703080576611022590670399844931867609777417528903454731922206378932141464755402629420074293816349270038351339419146768473851353171629153912238797141905920143036064131705230421762305232861503856799511155936565169005916711845389135580928162511912438531204156138447775120789548666143600293412065767167106888509172568003530668539460588248316513392652567856224602697296203328920073354425994044956624831346979458846837597950064151867164583749203433942592178528868981311575331848941597492470436782387502687532649093096498315347403977436001399982102030846763698994785054617523241463186980898394504211430763617825306895065661536045431497903759118007934839122881885863091769469883539876840543521295706315919855784493235603866268925981702690270202829595794350800918257913991744455922683343374046671669930219650268554687501e-4951
+-0x0.7p-149
+-0x0.7p-1074
+-0x0.7p-16445
+-0x0.7p-16494
+0x1p-150
+0x1p-1075
+0x1p-16446
+0x1p-16495
+-0x1p-150
+-0x1p-1075
+-0x1p-16446
+-0x1p-16495
+.70064923216240853546186479164495807e-45
+7.00649232162408535461864791644958065640130970938257885878534141944895541342930300743319094181060791015624e-46
+7.00649232162408535461864791644958065640130970938257885878534141944895541342930300743319094181060791015625e-46
+7.00649232162408535461864791644958065640130970938257885878534141944895541342930300743319094181060791015626e-46
+-7.00649232162408535461864791644958065640130970938257885878534141944895541342930300743319094181060791015624e-46
+-7.00649232162408535461864791644958065640130970938257885878534141944895541342930300743319094181060791015625e-46
+-7.00649232162408535461864791644958065640130970938257885878534141944895541342930300743319094181060791015626e-46
+2.4703282292062327208828439643411068618252990130716238221279284125033775363510437593264991818081799618989828234772285886546332835517796989819938739800539093906315035659515570226392290858392449105184435931802849936536152500319370457678249219365623669863658480757001585769269903706311928279558551332927834338409351978015531246597263579574622766465272827220056374006485499977096599470454020828166226237857393450736339007967761930577506740176324673600968951340535537458516661134223766678604162159680461914467291840300530057530849048765391711386591646239524912623653881879636239373280423891018672348497668235089863388587925628302755995657524455507255189313690836254779186948667994968324049705821028513185451396213837722826145437693412532098591327667236328124e-324
+2.4703282292062327208828439643411068618252990130716238221279284125033775363510437593264991818081799618989828234772285886546332835517796989819938739800539093906315035659515570226392290858392449105184435931802849936536152500319370457678249219365623669863658480757001585769269903706311928279558551332927834338409351978015531246597263579574622766465272827220056374006485499977096599470454020828166226237857393450736339007967761930577506740176324673600968951340535537458516661134223766678604162159680461914467291840300530057530849048765391711386591646239524912623653881879636239373280423891018672348497668235089863388587925628302755995657524455507255189313690836254779186948667994968324049705821028513185451396213837722826145437693412532098591327667236328125e-324
+2.4703282292062327208828439643411068618252990130716238221279284125033775363510437593264991818081799618989828234772285886546332835517796989819938739800539093906315035659515570226392290858392449105184435931802849936536152500319370457678249219365623669863658480757001585769269903706311928279558551332927834338409351978015531246597263579574622766465272827220056374006485499977096599470454020828166226237857393450736339007967761930577506740176324673600968951340535537458516661134223766678604162159680461914467291840300530057530849048765391711386591646239524912623653881879636239373280423891018672348497668235089863388587925628302755995657524455507255189313690836254779186948667994968324049705821028513185451396213837722826145437693412532098591327667236328126e-324
+-2.4703282292062327208828439643411068618252990130716238221279284125033775363510437593264991818081799618989828234772285886546332835517796989819938739800539093906315035659515570226392290858392449105184435931802849936536152500319370457678249219365623669863658480757001585769269903706311928279558551332927834338409351978015531246597263579574622766465272827220056374006485499977096599470454020828166226237857393450736339007967761930577506740176324673600968951340535537458516661134223766678604162159680461914467291840300530057530849048765391711386591646239524912623653881879636239373280423891018672348497668235089863388587925628302755995657524455507255189313690836254779186948667994968324049705821028513185451396213837722826145437693412532098591327667236328124e-324
+-2.4703282292062327208828439643411068618252990130716238221279284125033775363510437593264991818081799618989828234772285886546332835517796989819938739800539093906315035659515570226392290858392449105184435931802849936536152500319370457678249219365623669863658480757001585769269903706311928279558551332927834338409351978015531246597263579574622766465272827220056374006485499977096599470454020828166226237857393450736339007967761930577506740176324673600968951340535537458516661134223766678604162159680461914467291840300530057530849048765391711386591646239524912623653881879636239373280423891018672348497668235089863388587925628302755995657524455507255189313690836254779186948667994968324049705821028513185451396213837722826145437693412532098591327667236328125e-324
+-2.4703282292062327208828439643411068618252990130716238221279284125033775363510437593264991818081799618989828234772285886546332835517796989819938739800539093906315035659515570226392290858392449105184435931802849936536152500319370457678249219365623669863658480757001585769269903706311928279558551332927834338409351978015531246597263579574622766465272827220056374006485499977096599470454020828166226237857393450736339007967761930577506740176324673600968951340535537458516661134223766678604162159680461914467291840300530057530849048765391711386591646239524912623653881879636239373280423891018672348497668235089863388587925628302755995657524455507255189313690836254779186948667994968324049705821028513185451396213837722826145437693412532098591327667236328126e-324
+1.82259976594123730126420296680970990819952540784678167186049024351418584431669886840478035431291360259862367367360176555098349281631101608498675403779490450274191129058896583928461263190281677987831078128299170536447015989677676363429562039997708640550775926919152302738435771122464765292985913410713131103376617773042203403962987686984411316948595140667733210597864690600010838133614601613871681951542280276489775942764960612766058558174381456923146501775692637508015664228929367328342904167452656185259699435199165429391997316125073430122973318829343522821181735512119859732943017878403356723899138210986814640887564778026842288063392332395425873162546186801975636139070797668304819972220170105852674422401098888180221895434381162451705845464727526614177730212750823552425549507762484741018808753638726079896241463208233641468961241718926107442376223082667022657044926746945053999973304249789647043354111258394904631316614206681676861518285530333635550805084849345427276340804672339278791177264322833523245464353153129378096510959641978734303986620037096633539629329212395162630085725125582600936685277823883492820153083593049415051104450437620211914690606070787926358977364081411635544299722928735751692643879771301240039585999097767207595829950175191441110017783298397938554546884420461552538187244104722816024213635806139907491818083029479760454178844362711626647761487494632027538147971912063924809690969103877295273058627398067023490884558283804713066036286365630374146882657021080984305152976459971071596872478304966869803153760915112192273767083898623101906331345170408354325877269319107750447803297770519645747631196394042357976659226774333324024028170376571419266465026123884210852547563237372731787743310739247077115755551931534219571260621965209529206118711148614230326874252623232432768485954951338025914378049849860538923653349006471371371975851619548239568383911087481548770985671906958133943927799958876422544137402326929408872363515336911744925148845142650068227520261364354697002916289429272868432749597813293152504173604381153301045168945974496048759541471080100519101973888604170033075957748634771829115251095545428834602408676747944708548838154240391870140692461377047103665770055763116743840798104372065112827921945625030361510289100654183705651174880622260739758549192434399417410164472062845437778260804090757560281944655628120766454222846704757309223464545058305531743779508241780347081470374488718989636990233738212174195604234593588461272325314215528265459543623864312796269176427251818027542711345978562318056661295241015095829415854218885612968394742320564741129353791774349282275541494026428939134920627812463726111753054622717119310116356020391377016695730659609458715794206834400971798313683173521572022151606820588780251530071841853198634516520873759366510045598375024838080906130739822646856203519935194543445776352574523286837269888247054743973982471908128830717347432604265401234817912837829289728424665952102694142190409017939355538720903773940059325978870813594819158491785411281829232728432185130930121677446908186036638626917272725653250577033788275532848525020676860268503396244010460868170366183668422400245220420698887085348274712352039989322593091109423678562877840971664204374301183812473393474181569023692824311977350780165916130639182603434989926970020331865584136555767033892083012035521577557018520518779278646965154203692177035106027598152525747997287067958495583828773920163969005601017367414626907539916022639742121376325089842645593155408913831923616011893504143113588169809756975685615156809718301077041526572845529202418627301258888257023010355646157596158820107337643411098344495769079824062658034841113036159712976090652715172861118398396463438153644617763942735713912193155539153353006222951965776408842015246576140657437291217544606529750759900127860216624160777572354875625503811168240060144404381782532731747344361636381195322953833511355431708115960517850363668467732859378452319744244754189705176591797980699728768894888776273098873237375908148750504573178096251637132279732290029080034917390851159718996069867384057524634361867451078210323154806935160062513887899020538632350719578957221218762625988338233522900425764882381207240722674803484256371990031477603784632430434075343952218821448873158758760259077397922975757953735064291924684701700383120505009176657075834209273037908753324078050945056651597552104952664855941872449222161542832136880323939394014264995176092751280620673551723331208577960453876924923755340564701453016713590166028324696751231085985884240222167593347334526263303037916609526590361628275094514687712979547371657019216768348669940844962684915105995807144581550267466768607900288997226458836794359699020464423731084729515154927619118848472118259301156549275391180883502559594450767573982988933806622483582100752977021911865196145152803953417231772013838628271297216496382745313147623777787545601193971231801073102166081571418283792593282745084673717170570311045377504502284479416196840733756305173220061186402909252416023762563344143764956029112654501658894183721617190636706196102146327745427411573664267478610548114494490049701326681466073235027601469575864652759810903283362563811874506460304920716945160547124445139612696233397054113663378176432693167172174324788120020498949799252604115536513853848262142313920128414259368279443832662271152360297173930646598210564674468705978287574339360244225115375618646198655959556280703437804726344639166084401515545027901284172772594924370056965764537173873096051299395266611814969942972446937104374365814436535553437638172469618344861812949854558849812664215334381772718093108970359582607762182530978586011606431206539270246528340251461663568777312665664372314290610998078251132725518693529082410739556958543548525453707936098381671273577525790074909555360813881034617350711745676369290608241723750100354970106149571977139199099246359065033480164509524755309789212426564987013135305339916928676198868262047064684760709433781635772354068612627551149096062556283756591960503706614301481072163106357293601120215712910962780320764010922253732701739505753777925668721137680859409919296558240509140850139708613990151410104328354063372667467067274819461968988824720951115052103399330025052273347500202856736346707384583901599334942268514999353369220365516871691405825741537268724538008583607648929752017570278626326151302560754685495028393678419262128727319250428386913197576633827464717820878289888579781924835957478890210814594606277052757358686187249587833483622951068755564437706268645919720898812154651410735166469301589965697476758067194636020452303250497949048947399883127275733209713104883264862130618398438300031458732794354541218179182692182949013878301564321481423815928645752291194790291300506635648891720930673414441649427368858727539840128657434212664708614252838891346368857902932357270177886061675600124771866970699942139129985509310786171897907713767025490553617452052324190314230443669713785943929520934640464416671176139062034948722091493965189712072792638835666067743532362554736033778616139422395438938944605811706580880420836614049374657066594246393012966219639062789307544592960174860630795820249954853388936995742898065294246733938102175776059529094912831231797891546390571057749606999349996810181557492618640128215744807587466320221438600412521428466916484908092508563270571335405686177916252953143575335641923049301557353017574575315800626626939667724977283350476378690544602400232622622606984439469645646912594417064906111761643056936695157678048364605212059547317525838488465251538119345419979627752159611803463974561223291334210165604062771592587817061728345698629469530077932541521870102279760384499807979877285590410184415905645947383083105790145978931820171516152080500903184835361062491319185763169442515370923471198674337350461697251811045075909288347136691842306340831907917252439136412062563991015509661175647955551494200111528584410842714112893660931587222547527616371447626907477263138994491219951425656610431931653530106776137603833078393623616256283714563444092455070819135182372571411642399666607859039700751818268082294407317787468307510454272859459361639319979293997084018517407055270237114922624894768464359698724807022283865063570179483291145554841647601059067178556847880390815917137788528020328496013081698320174206083993477134242184345417718684421898434176286183306074297397337394378635818040034822140823705679673305304460208977733857268729121898133230944150931434375503975562627800112089417314200987543199614195325678616295902673204032176076607741253741011953899538950353479401701480978109520837367985644204216226079933908944509320472574034339086658841246013841750123876174304679348186657771224594878774792577476351726916884715747652858200960751333538695549872163988000264532075579235359661317563583521988757053827631636808305880569746716283687194118275915928060447077646581456256839985578728945837051179362571449947348159120582527720210320816824370932805266651927288698009547480142504810428454261511435444743728876175627914098669648063196082808198168469420588173819431297620345075913670651853432169177514148111886459795089429969643832554329992461199712957262962023969219032890174902935953126450366971415811499887844992885605846137934153585373646778724962248920989408566923423587556265193045579464470040331860146021474495993513170797583044448771741365214872568116252634674100076242158561453923395526895656905772931330601248536544975755715095764080696461966467575052492961263728205392340905646916958065447157660255882585819023423114809694122214668524218426504844940638948658914245639927512262303170595924131913084701462263664582335366579733760671407937763694121917898012253202550794445927090056988580987161070251889864283474072790532666000445210799879898795369575601310701000600506735376838711381823879045908375392524259853266319554558572588187561880636974923425500452774001254800799279088468508982839057565328297629505098869916759252131884099115322420686108894783264515139811150209926303957155203500393727027411079117369478937095384712003637406693041168456532590381021805048371107896453595203099293812662714637405025074568828822557880697107157708023383177045107932793985761637095123260953060223303469977176881187266346286506759842379165512015006845041184833055602957447462579518605453908265316222905883648379800344280559713700655734203702709055921414200515024650167935251509501402436061376649103597691145127922934267080064403467326795745195948481361947814886969942673557755096669771873496442918230266249855317268651317823644283800930551559885321061219165671786041281110803227612135737813344806675638712573522540330326752464442386379900620750588198544947113799155493133901793000917834934968229504797669239833050649010268588703408635567999483106225365924725096344849106407354596440471549184675431400247646054497566794504464730489228246171177238763846374129323806353067143453547105684101405874350776205012855998370519788550563353055706151297118603093875039708128437347187128159250402631828887145334311373552557223689628363908560011768895131535294161055044642175226187415342324320677763066911181419980149855416104489931529489458659833547172890548612497344779808640595096229937705251106163138658308234789274625008958442163643654994384491346591453337999940340102822545663315950182058410804877289936327981680704769212059417689650218871786818104993012530393359782797076272952876972564899611799589468478404319021053066185948310785346220896419939008967567342765319314502669727526379972481519742277811246822238899767398834228515624e-4951
+1.82259976594123730126420296680970990819952540784678167186049024351418584431669886840478035431291360259862367367360176555098349281631101608498675403779490450274191129058896583928461263190281677987831078128299170536447015989677676363429562039997708640550775926919152302738435771122464765292985913410713131103376617773042203403962987686984411316948595140667733210597864690600010838133614601613871681951542280276489775942764960612766058558174381456923146501775692637508015664228929367328342904167452656185259699435199165429391997316125073430122973318829343522821181735512119859732943017878403356723899138210986814640887564778026842288063392332395425873162546186801975636139070797668304819972220170105852674422401098888180221895434381162451705845464727526614177730212750823552425549507762484741018808753638726079896241463208233641468961241718926107442376223082667022657044926746945053999973304249789647043354111258394904631316614206681676861518285530333635550805084849345427276340804672339278791177264322833523245464353153129378096510959641978734303986620037096633539629329212395162630085725125582600936685277823883492820153083593049415051104450437620211914690606070787926358977364081411635544299722928735751692643879771301240039585999097767207595829950175191441110017783298397938554546884420461552538187244104722816024213635806139907491818083029479760454178844362711626647761487494632027538147971912063924809690969103877295273058627398067023490884558283804713066036286365630374146882657021080984305152976459971071596872478304966869803153760915112192273767083898623101906331345170408354325877269319107750447803297770519645747631196394042357976659226774333324024028170376571419266465026123884210852547563237372731787743310739247077115755551931534219571260621965209529206118711148614230326874252623232432768485954951338025914378049849860538923653349006471371371975851619548239568383911087481548770985671906958133943927799958876422544137402326929408872363515336911744925148845142650068227520261364354697002916289429272868432749597813293152504173604381153301045168945974496048759541471080100519101973888604170033075957748634771829115251095545428834602408676747944708548838154240391870140692461377047103665770055763116743840798104372065112827921945625030361510289100654183705651174880622260739758549192434399417410164472062845437778260804090757560281944655628120766454222846704757309223464545058305531743779508241780347081470374488718989636990233738212174195604234593588461272325314215528265459543623864312796269176427251818027542711345978562318056661295241015095829415854218885612968394742320564741129353791774349282275541494026428939134920627812463726111753054622717119310116356020391377016695730659609458715794206834400971798313683173521572022151606820588780251530071841853198634516520873759366510045598375024838080906130739822646856203519935194543445776352574523286837269888247054743973982471908128830717347432604265401234817912837829289728424665952102694142190409017939355538720903773940059325978870813594819158491785411281829232728432185130930121677446908186036638626917272725653250577033788275532848525020676860268503396244010460868170366183668422400245220420698887085348274712352039989322593091109423678562877840971664204374301183812473393474181569023692824311977350780165916130639182603434989926970020331865584136555767033892083012035521577557018520518779278646965154203692177035106027598152525747997287067958495583828773920163969005601017367414626907539916022639742121376325089842645593155408913831923616011893504143113588169809756975685615156809718301077041526572845529202418627301258888257023010355646157596158820107337643411098344495769079824062658034841113036159712976090652715172861118398396463438153644617763942735713912193155539153353006222951965776408842015246576140657437291217544606529750759900127860216624160777572354875625503811168240060144404381782532731747344361636381195322953833511355431708115960517850363668467732859378452319744244754189705176591797980699728768894888776273098873237375908148750504573178096251637132279732290029080034917390851159718996069867384057524634361867451078210323154806935160062513887899020538632350719578957221218762625988338233522900425764882381207240722674803484256371990031477603784632430434075343952218821448873158758760259077397922975757953735064291924684701700383120505009176657075834209273037908753324078050945056651597552104952664855941872449222161542832136880323939394014264995176092751280620673551723331208577960453876924923755340564701453016713590166028324696751231085985884240222167593347334526263303037916609526590361628275094514687712979547371657019216768348669940844962684915105995807144581550267466768607900288997226458836794359699020464423731084729515154927619118848472118259301156549275391180883502559594450767573982988933806622483582100752977021911865196145152803953417231772013838628271297216496382745313147623777787545601193971231801073102166081571418283792593282745084673717170570311045377504502284479416196840733756305173220061186402909252416023762563344143764956029112654501658894183721617190636706196102146327745427411573664267478610548114494490049701326681466073235027601469575864652759810903283362563811874506460304920716945160547124445139612696233397054113663378176432693167172174324788120020498949799252604115536513853848262142313920128414259368279443832662271152360297173930646598210564674468705978287574339360244225115375618646198655959556280703437804726344639166084401515545027901284172772594924370056965764537173873096051299395266611814969942972446937104374365814436535553437638172469618344861812949854558849812664215334381772718093108970359582607762182530978586011606431206539270246528340251461663568777312665664372314290610998078251132725518693529082410739556958543548525453707936098381671273577525790074909555360813881034617350711745676369290608241723750100354970106149571977139199099246359065033480164509524755309789212426564987013135305339916928676198868262047064684760709433781635772354068612627551149096062556283756591960503706614301481072163106357293601120215712910962780320764010922253732701739505753777925668721137680859409919296558240509140850139708613990151410104328354063372667467067274819461968988824720951115052103399330025052273347500202856736346707384583901599334942268514999353369220365516871691405825741537268724538008583607648929752017570278626326151302560754685495028393678419262128727319250428386913197576633827464717820878289888579781924835957478890210814594606277052757358686187249587833483622951068755564437706268645919720898812154651410735166469301589965697476758067194636020452303250497949048947399883127275733209713104883264862130618398438300031458732794354541218179182692182949013878301564321481423815928645752291194790291300506635648891720930673414441649427368858727539840128657434212664708614252838891346368857902932357270177886061675600124771866970699942139129985509310786171897907713767025490553617452052324190314230443669713785943929520934640464416671176139062034948722091493965189712072792638835666067743532362554736033778616139422395438938944605811706580880420836614049374657066594246393012966219639062789307544592960174860630795820249954853388936995742898065294246733938102175776059529094912831231797891546390571057749606999349996810181557492618640128215744807587466320221438600412521428466916484908092508563270571335405686177916252953143575335641923049301557353017574575315800626626939667724977283350476378690544602400232622622606984439469645646912594417064906111761643056936695157678048364605212059547317525838488465251538119345419979627752159611803463974561223291334210165604062771592587817061728345698629469530077932541521870102279760384499807979877285590410184415905645947383083105790145978931820171516152080500903184835361062491319185763169442515370923471198674337350461697251811045075909288347136691842306340831907917252439136412062563991015509661175647955551494200111528584410842714112893660931587222547527616371447626907477263138994491219951425656610431931653530106776137603833078393623616256283714563444092455070819135182372571411642399666607859039700751818268082294407317787468307510454272859459361639319979293997084018517407055270237114922624894768464359698724807022283865063570179483291145554841647601059067178556847880390815917137788528020328496013081698320174206083993477134242184345417718684421898434176286183306074297397337394378635818040034822140823705679673305304460208977733857268729121898133230944150931434375503975562627800112089417314200987543199614195325678616295902673204032176076607741253741011953899538950353479401701480978109520837367985644204216226079933908944509320472574034339086658841246013841750123876174304679348186657771224594878774792577476351726916884715747652858200960751333538695549872163988000264532075579235359661317563583521988757053827631636808305880569746716283687194118275915928060447077646581456256839985578728945837051179362571449947348159120582527720210320816824370932805266651927288698009547480142504810428454261511435444743728876175627914098669648063196082808198168469420588173819431297620345075913670651853432169177514148111886459795089429969643832554329992461199712957262962023969219032890174902935953126450366971415811499887844992885605846137934153585373646778724962248920989408566923423587556265193045579464470040331860146021474495993513170797583044448771741365214872568116252634674100076242158561453923395526895656905772931330601248536544975755715095764080696461966467575052492961263728205392340905646916958065447157660255882585819023423114809694122214668524218426504844940638948658914245639927512262303170595924131913084701462263664582335366579733760671407937763694121917898012253202550794445927090056988580987161070251889864283474072790532666000445210799879898795369575601310701000600506735376838711381823879045908375392524259853266319554558572588187561880636974923425500452774001254800799279088468508982839057565328297629505098869916759252131884099115322420686108894783264515139811150209926303957155203500393727027411079117369478937095384712003637406693041168456532590381021805048371107896453595203099293812662714637405025074568828822557880697107157708023383177045107932793985761637095123260953060223303469977176881187266346286506759842379165512015006845041184833055602957447462579518605453908265316222905883648379800344280559713700655734203702709055921414200515024650167935251509501402436061376649103597691145127922934267080064403467326795745195948481361947814886969942673557755096669771873496442918230266249855317268651317823644283800930551559885321061219165671786041281110803227612135737813344806675638712573522540330326752464442386379900620750588198544947113799155493133901793000917834934968229504797669239833050649010268588703408635567999483106225365924725096344849106407354596440471549184675431400247646054497566794504464730489228246171177238763846374129323806353067143453547105684101405874350776205012855998370519788550563353055706151297118603093875039708128437347187128159250402631828887145334311373552557223689628363908560011768895131535294161055044642175226187415342324320677763066911181419980149855416104489931529489458659833547172890548612497344779808640595096229937705251106163138658308234789274625008958442163643654994384491346591453337999940340102822545663315950182058410804877289936327981680704769212059417689650218871786818104993012530393359782797076272952876972564899611799589468478404319021053066185948310785346220896419939008967567342765319314502669727526379972481519742277811246822238899767398834228515625e-4951
+1.82259976594123730126420296680970990819952540784678167186049024351418584431669886840478035431291360259862367367360176555098349281631101608498675403779490450274191129058896583928461263190281677987831078128299170536447015989677676363429562039997708640550775926919152302738435771122464765292985913410713131103376617773042203403962987686984411316948595140667733210597864690600010838133614601613871681951542280276489775942764960612766058558174381456923146501775692637508015664228929367328342904167452656185259699435199165429391997316125073430122973318829343522821181735512119859732943017878403356723899138210986814640887564778026842288063392332395425873162546186801975636139070797668304819972220170105852674422401098888180221895434381162451705845464727526614177730212750823552425549507762484741018808753638726079896241463208233641468961241718926107442376223082667022657044926746945053999973304249789647043354111258394904631316614206681676861518285530333635550805084849345427276340804672339278791177264322833523245464353153129378096510959641978734303986620037096633539629329212395162630085725125582600936685277823883492820153083593049415051104450437620211914690606070787926358977364081411635544299722928735751692643879771301240039585999097767207595829950175191441110017783298397938554546884420461552538187244104722816024213635806139907491818083029479760454178844362711626647761487494632027538147971912063924809690969103877295273058627398067023490884558283804713066036286365630374146882657021080984305152976459971071596872478304966869803153760915112192273767083898623101906331345170408354325877269319107750447803297770519645747631196394042357976659226774333324024028170376571419266465026123884210852547563237372731787743310739247077115755551931534219571260621965209529206118711148614230326874252623232432768485954951338025914378049849860538923653349006471371371975851619548239568383911087481548770985671906958133943927799958876422544137402326929408872363515336911744925148845142650068227520261364354697002916289429272868432749597813293152504173604381153301045168945974496048759541471080100519101973888604170033075957748634771829115251095545428834602408676747944708548838154240391870140692461377047103665770055763116743840798104372065112827921945625030361510289100654183705651174880622260739758549192434399417410164472062845437778260804090757560281944655628120766454222846704757309223464545058305531743779508241780347081470374488718989636990233738212174195604234593588461272325314215528265459543623864312796269176427251818027542711345978562318056661295241015095829415854218885612968394742320564741129353791774349282275541494026428939134920627812463726111753054622717119310116356020391377016695730659609458715794206834400971798313683173521572022151606820588780251530071841853198634516520873759366510045598375024838080906130739822646856203519935194543445776352574523286837269888247054743973982471908128830717347432604265401234817912837829289728424665952102694142190409017939355538720903773940059325978870813594819158491785411281829232728432185130930121677446908186036638626917272725653250577033788275532848525020676860268503396244010460868170366183668422400245220420698887085348274712352039989322593091109423678562877840971664204374301183812473393474181569023692824311977350780165916130639182603434989926970020331865584136555767033892083012035521577557018520518779278646965154203692177035106027598152525747997287067958495583828773920163969005601017367414626907539916022639742121376325089842645593155408913831923616011893504143113588169809756975685615156809718301077041526572845529202418627301258888257023010355646157596158820107337643411098344495769079824062658034841113036159712976090652715172861118398396463438153644617763942735713912193155539153353006222951965776408842015246576140657437291217544606529750759900127860216624160777572354875625503811168240060144404381782532731747344361636381195322953833511355431708115960517850363668467732859378452319744244754189705176591797980699728768894888776273098873237375908148750504573178096251637132279732290029080034917390851159718996069867384057524634361867451078210323154806935160062513887899020538632350719578957221218762625988338233522900425764882381207240722674803484256371990031477603784632430434075343952218821448873158758760259077397922975757953735064291924684701700383120505009176657075834209273037908753324078050945056651597552104952664855941872449222161542832136880323939394014264995176092751280620673551723331208577960453876924923755340564701453016713590166028324696751231085985884240222167593347334526263303037916609526590361628275094514687712979547371657019216768348669940844962684915105995807144581550267466768607900288997226458836794359699020464423731084729515154927619118848472118259301156549275391180883502559594450767573982988933806622483582100752977021911865196145152803953417231772013838628271297216496382745313147623777787545601193971231801073102166081571418283792593282745084673717170570311045377504502284479416196840733756305173220061186402909252416023762563344143764956029112654501658894183721617190636706196102146327745427411573664267478610548114494490049701326681466073235027601469575864652759810903283362563811874506460304920716945160547124445139612696233397054113663378176432693167172174324788120020498949799252604115536513853848262142313920128414259368279443832662271152360297173930646598210564674468705978287574339360244225115375618646198655959556280703437804726344639166084401515545027901284172772594924370056965764537173873096051299395266611814969942972446937104374365814436535553437638172469618344861812949854558849812664215334381772718093108970359582607762182530978586011606431206539270246528340251461663568777312665664372314290610998078251132725518693529082410739556958543548525453707936098381671273577525790074909555360813881034617350711745676369290608241723750100354970106149571977139199099246359065033480164509524755309789212426564987013135305339916928676198868262047064684760709433781635772354068612627551149096062556283756591960503706614301481072163106357293601120215712910962780320764010922253732701739505753777925668721137680859409919296558240509140850139708613990151410104328354063372667467067274819461968988824720951115052103399330025052273347500202856736346707384583901599334942268514999353369220365516871691405825741537268724538008583607648929752017570278626326151302560754685495028393678419262128727319250428386913197576633827464717820878289888579781924835957478890210814594606277052757358686187249587833483622951068755564437706268645919720898812154651410735166469301589965697476758067194636020452303250497949048947399883127275733209713104883264862130618398438300031458732794354541218179182692182949013878301564321481423815928645752291194790291300506635648891720930673414441649427368858727539840128657434212664708614252838891346368857902932357270177886061675600124771866970699942139129985509310786171897907713767025490553617452052324190314230443669713785943929520934640464416671176139062034948722091493965189712072792638835666067743532362554736033778616139422395438938944605811706580880420836614049374657066594246393012966219639062789307544592960174860630795820249954853388936995742898065294246733938102175776059529094912831231797891546390571057749606999349996810181557492618640128215744807587466320221438600412521428466916484908092508563270571335405686177916252953143575335641923049301557353017574575315800626626939667724977283350476378690544602400232622622606984439469645646912594417064906111761643056936695157678048364605212059547317525838488465251538119345419979627752159611803463974561223291334210165604062771592587817061728345698629469530077932541521870102279760384499807979877285590410184415905645947383083105790145978931820171516152080500903184835361062491319185763169442515370923471198674337350461697251811045075909288347136691842306340831907917252439136412062563991015509661175647955551494200111528584410842714112893660931587222547527616371447626907477263138994491219951425656610431931653530106776137603833078393623616256283714563444092455070819135182372571411642399666607859039700751818268082294407317787468307510454272859459361639319979293997084018517407055270237114922624894768464359698724807022283865063570179483291145554841647601059067178556847880390815917137788528020328496013081698320174206083993477134242184345417718684421898434176286183306074297397337394378635818040034822140823705679673305304460208977733857268729121898133230944150931434375503975562627800112089417314200987543199614195325678616295902673204032176076607741253741011953899538950353479401701480978109520837367985644204216226079933908944509320472574034339086658841246013841750123876174304679348186657771224594878774792577476351726916884715747652858200960751333538695549872163988000264532075579235359661317563583521988757053827631636808305880569746716283687194118275915928060447077646581456256839985578728945837051179362571449947348159120582527720210320816824370932805266651927288698009547480142504810428454261511435444743728876175627914098669648063196082808198168469420588173819431297620345075913670651853432169177514148111886459795089429969643832554329992461199712957262962023969219032890174902935953126450366971415811499887844992885605846137934153585373646778724962248920989408566923423587556265193045579464470040331860146021474495993513170797583044448771741365214872568116252634674100076242158561453923395526895656905772931330601248536544975755715095764080696461966467575052492961263728205392340905646916958065447157660255882585819023423114809694122214668524218426504844940638948658914245639927512262303170595924131913084701462263664582335366579733760671407937763694121917898012253202550794445927090056988580987161070251889864283474072790532666000445210799879898795369575601310701000600506735376838711381823879045908375392524259853266319554558572588187561880636974923425500452774001254800799279088468508982839057565328297629505098869916759252131884099115322420686108894783264515139811150209926303957155203500393727027411079117369478937095384712003637406693041168456532590381021805048371107896453595203099293812662714637405025074568828822557880697107157708023383177045107932793985761637095123260953060223303469977176881187266346286506759842379165512015006845041184833055602957447462579518605453908265316222905883648379800344280559713700655734203702709055921414200515024650167935251509501402436061376649103597691145127922934267080064403467326795745195948481361947814886969942673557755096669771873496442918230266249855317268651317823644283800930551559885321061219165671786041281110803227612135737813344806675638712573522540330326752464442386379900620750588198544947113799155493133901793000917834934968229504797669239833050649010268588703408635567999483106225365924725096344849106407354596440471549184675431400247646054497566794504464730489228246171177238763846374129323806353067143453547105684101405874350776205012855998370519788550563353055706151297118603093875039708128437347187128159250402631828887145334311373552557223689628363908560011768895131535294161055044642175226187415342324320677763066911181419980149855416104489931529489458659833547172890548612497344779808640595096229937705251106163138658308234789274625008958442163643654994384491346591453337999940340102822545663315950182058410804877289936327981680704769212059417689650218871786818104993012530393359782797076272952876972564899611799589468478404319021053066185948310785346220896419939008967567342765319314502669727526379972481519742277811246822238899767398834228515626e-4951
+-1.82259976594123730126420296680970990819952540784678167186049024351418584431669886840478035431291360259862367367360176555098349281631101608498675403779490450274191129058896583928461263190281677987831078128299170536447015989677676363429562039997708640550775926919152302738435771122464765292985913410713131103376617773042203403962987686984411316948595140667733210597864690600010838133614601613871681951542280276489775942764960612766058558174381456923146501775692637508015664228929367328342904167452656185259699435199165429391997316125073430122973318829343522821181735512119859732943017878403356723899138210986814640887564778026842288063392332395425873162546186801975636139070797668304819972220170105852674422401098888180221895434381162451705845464727526614177730212750823552425549507762484741018808753638726079896241463208233641468961241718926107442376223082667022657044926746945053999973304249789647043354111258394904631316614206681676861518285530333635550805084849345427276340804672339278791177264322833523245464353153129378096510959641978734303986620037096633539629329212395162630085725125582600936685277823883492820153083593049415051104450437620211914690606070787926358977364081411635544299722928735751692643879771301240039585999097767207595829950175191441110017783298397938554546884420461552538187244104722816024213635806139907491818083029479760454178844362711626647761487494632027538147971912063924809690969103877295273058627398067023490884558283804713066036286365630374146882657021080984305152976459971071596872478304966869803153760915112192273767083898623101906331345170408354325877269319107750447803297770519645747631196394042357976659226774333324024028170376571419266465026123884210852547563237372731787743310739247077115755551931534219571260621965209529206118711148614230326874252623232432768485954951338025914378049849860538923653349006471371371975851619548239568383911087481548770985671906958133943927799958876422544137402326929408872363515336911744925148845142650068227520261364354697002916289429272868432749597813293152504173604381153301045168945974496048759541471080100519101973888604170033075957748634771829115251095545428834602408676747944708548838154240391870140692461377047103665770055763116743840798104372065112827921945625030361510289100654183705651174880622260739758549192434399417410164472062845437778260804090757560281944655628120766454222846704757309223464545058305531743779508241780347081470374488718989636990233738212174195604234593588461272325314215528265459543623864312796269176427251818027542711345978562318056661295241015095829415854218885612968394742320564741129353791774349282275541494026428939134920627812463726111753054622717119310116356020391377016695730659609458715794206834400971798313683173521572022151606820588780251530071841853198634516520873759366510045598375024838080906130739822646856203519935194543445776352574523286837269888247054743973982471908128830717347432604265401234817912837829289728424665952102694142190409017939355538720903773940059325978870813594819158491785411281829232728432185130930121677446908186036638626917272725653250577033788275532848525020676860268503396244010460868170366183668422400245220420698887085348274712352039989322593091109423678562877840971664204374301183812473393474181569023692824311977350780165916130639182603434989926970020331865584136555767033892083012035521577557018520518779278646965154203692177035106027598152525747997287067958495583828773920163969005601017367414626907539916022639742121376325089842645593155408913831923616011893504143113588169809756975685615156809718301077041526572845529202418627301258888257023010355646157596158820107337643411098344495769079824062658034841113036159712976090652715172861118398396463438153644617763942735713912193155539153353006222951965776408842015246576140657437291217544606529750759900127860216624160777572354875625503811168240060144404381782532731747344361636381195322953833511355431708115960517850363668467732859378452319744244754189705176591797980699728768894888776273098873237375908148750504573178096251637132279732290029080034917390851159718996069867384057524634361867451078210323154806935160062513887899020538632350719578957221218762625988338233522900425764882381207240722674803484256371990031477603784632430434075343952218821448873158758760259077397922975757953735064291924684701700383120505009176657075834209273037908753324078050945056651597552104952664855941872449222161542832136880323939394014264995176092751280620673551723331208577960453876924923755340564701453016713590166028324696751231085985884240222167593347334526263303037916609526590361628275094514687712979547371657019216768348669940844962684915105995807144581550267466768607900288997226458836794359699020464423731084729515154927619118848472118259301156549275391180883502559594450767573982988933806622483582100752977021911865196145152803953417231772013838628271297216496382745313147623777787545601193971231801073102166081571418283792593282745084673717170570311045377504502284479416196840733756305173220061186402909252416023762563344143764956029112654501658894183721617190636706196102146327745427411573664267478610548114494490049701326681466073235027601469575864652759810903283362563811874506460304920716945160547124445139612696233397054113663378176432693167172174324788120020498949799252604115536513853848262142313920128414259368279443832662271152360297173930646598210564674468705978287574339360244225115375618646198655959556280703437804726344639166084401515545027901284172772594924370056965764537173873096051299395266611814969942972446937104374365814436535553437638172469618344861812949854558849812664215334381772718093108970359582607762182530978586011606431206539270246528340251461663568777312665664372314290610998078251132725518693529082410739556958543548525453707936098381671273577525790074909555360813881034617350711745676369290608241723750100354970106149571977139199099246359065033480164509524755309789212426564987013135305339916928676198868262047064684760709433781635772354068612627551149096062556283756591960503706614301481072163106357293601120215712910962780320764010922253732701739505753777925668721137680859409919296558240509140850139708613990151410104328354063372667467067274819461968988824720951115052103399330025052273347500202856736346707384583901599334942268514999353369220365516871691405825741537268724538008583607648929752017570278626326151302560754685495028393678419262128727319250428386913197576633827464717820878289888579781924835957478890210814594606277052757358686187249587833483622951068755564437706268645919720898812154651410735166469301589965697476758067194636020452303250497949048947399883127275733209713104883264862130618398438300031458732794354541218179182692182949013878301564321481423815928645752291194790291300506635648891720930673414441649427368858727539840128657434212664708614252838891346368857902932357270177886061675600124771866970699942139129985509310786171897907713767025490553617452052324190314230443669713785943929520934640464416671176139062034948722091493965189712072792638835666067743532362554736033778616139422395438938944605811706580880420836614049374657066594246393012966219639062789307544592960174860630795820249954853388936995742898065294246733938102175776059529094912831231797891546390571057749606999349996810181557492618640128215744807587466320221438600412521428466916484908092508563270571335405686177916252953143575335641923049301557353017574575315800626626939667724977283350476378690544602400232622622606984439469645646912594417064906111761643056936695157678048364605212059547317525838488465251538119345419979627752159611803463974561223291334210165604062771592587817061728345698629469530077932541521870102279760384499807979877285590410184415905645947383083105790145978931820171516152080500903184835361062491319185763169442515370923471198674337350461697251811045075909288347136691842306340831907917252439136412062563991015509661175647955551494200111528584410842714112893660931587222547527616371447626907477263138994491219951425656610431931653530106776137603833078393623616256283714563444092455070819135182372571411642399666607859039700751818268082294407317787468307510454272859459361639319979293997084018517407055270237114922624894768464359698724807022283865063570179483291145554841647601059067178556847880390815917137788528020328496013081698320174206083993477134242184345417718684421898434176286183306074297397337394378635818040034822140823705679673305304460208977733857268729121898133230944150931434375503975562627800112089417314200987543199614195325678616295902673204032176076607741253741011953899538950353479401701480978109520837367985644204216226079933908944509320472574034339086658841246013841750123876174304679348186657771224594878774792577476351726916884715747652858200960751333538695549872163988000264532075579235359661317563583521988757053827631636808305880569746716283687194118275915928060447077646581456256839985578728945837051179362571449947348159120582527720210320816824370932805266651927288698009547480142504810428454261511435444743728876175627914098669648063196082808198168469420588173819431297620345075913670651853432169177514148111886459795089429969643832554329992461199712957262962023969219032890174902935953126450366971415811499887844992885605846137934153585373646778724962248920989408566923423587556265193045579464470040331860146021474495993513170797583044448771741365214872568116252634674100076242158561453923395526895656905772931330601248536544975755715095764080696461966467575052492961263728205392340905646916958065447157660255882585819023423114809694122214668524218426504844940638948658914245639927512262303170595924131913084701462263664582335366579733760671407937763694121917898012253202550794445927090056988580987161070251889864283474072790532666000445210799879898795369575601310701000600506735376838711381823879045908375392524259853266319554558572588187561880636974923425500452774001254800799279088468508982839057565328297629505098869916759252131884099115322420686108894783264515139811150209926303957155203500393727027411079117369478937095384712003637406693041168456532590381021805048371107896453595203099293812662714637405025074568828822557880697107157708023383177045107932793985761637095123260953060223303469977176881187266346286506759842379165512015006845041184833055602957447462579518605453908265316222905883648379800344280559713700655734203702709055921414200515024650167935251509501402436061376649103597691145127922934267080064403467326795745195948481361947814886969942673557755096669771873496442918230266249855317268651317823644283800930551559885321061219165671786041281110803227612135737813344806675638712573522540330326752464442386379900620750588198544947113799155493133901793000917834934968229504797669239833050649010268588703408635567999483106225365924725096344849106407354596440471549184675431400247646054497566794504464730489228246171177238763846374129323806353067143453547105684101405874350776205012855998370519788550563353055706151297118603093875039708128437347187128159250402631828887145334311373552557223689628363908560011768895131535294161055044642175226187415342324320677763066911181419980149855416104489931529489458659833547172890548612497344779808640595096229937705251106163138658308234789274625008958442163643654994384491346591453337999940340102822545663315950182058410804877289936327981680704769212059417689650218871786818104993012530393359782797076272952876972564899611799589468478404319021053066185948310785346220896419939008967567342765319314502669727526379972481519742277811246822238899767398834228515624e-4951
+-1.82259976594123730126420296680970990819952540784678167186049024351418584431669886840478035431291360259862367367360176555098349281631101608498675403779490450274191129058896583928461263190281677987831078128299170536447015989677676363429562039997708640550775926919152302738435771122464765292985913410713131103376617773042203403962987686984411316948595140667733210597864690600010838133614601613871681951542280276489775942764960612766058558174381456923146501775692637508015664228929367328342904167452656185259699435199165429391997316125073430122973318829343522821181735512119859732943017878403356723899138210986814640887564778026842288063392332395425873162546186801975636139070797668304819972220170105852674422401098888180221895434381162451705845464727526614177730212750823552425549507762484741018808753638726079896241463208233641468961241718926107442376223082667022657044926746945053999973304249789647043354111258394904631316614206681676861518285530333635550805084849345427276340804672339278791177264322833523245464353153129378096510959641978734303986620037096633539629329212395162630085725125582600936685277823883492820153083593049415051104450437620211914690606070787926358977364081411635544299722928735751692643879771301240039585999097767207595829950175191441110017783298397938554546884420461552538187244104722816024213635806139907491818083029479760454178844362711626647761487494632027538147971912063924809690969103877295273058627398067023490884558283804713066036286365630374146882657021080984305152976459971071596872478304966869803153760915112192273767083898623101906331345170408354325877269319107750447803297770519645747631196394042357976659226774333324024028170376571419266465026123884210852547563237372731787743310739247077115755551931534219571260621965209529206118711148614230326874252623232432768485954951338025914378049849860538923653349006471371371975851619548239568383911087481548770985671906958133943927799958876422544137402326929408872363515336911744925148845142650068227520261364354697002916289429272868432749597813293152504173604381153301045168945974496048759541471080100519101973888604170033075957748634771829115251095545428834602408676747944708548838154240391870140692461377047103665770055763116743840798104372065112827921945625030361510289100654183705651174880622260739758549192434399417410164472062845437778260804090757560281944655628120766454222846704757309223464545058305531743779508241780347081470374488718989636990233738212174195604234593588461272325314215528265459543623864312796269176427251818027542711345978562318056661295241015095829415854218885612968394742320564741129353791774349282275541494026428939134920627812463726111753054622717119310116356020391377016695730659609458715794206834400971798313683173521572022151606820588780251530071841853198634516520873759366510045598375024838080906130739822646856203519935194543445776352574523286837269888247054743973982471908128830717347432604265401234817912837829289728424665952102694142190409017939355538720903773940059325978870813594819158491785411281829232728432185130930121677446908186036638626917272725653250577033788275532848525020676860268503396244010460868170366183668422400245220420698887085348274712352039989322593091109423678562877840971664204374301183812473393474181569023692824311977350780165916130639182603434989926970020331865584136555767033892083012035521577557018520518779278646965154203692177035106027598152525747997287067958495583828773920163969005601017367414626907539916022639742121376325089842645593155408913831923616011893504143113588169809756975685615156809718301077041526572845529202418627301258888257023010355646157596158820107337643411098344495769079824062658034841113036159712976090652715172861118398396463438153644617763942735713912193155539153353006222951965776408842015246576140657437291217544606529750759900127860216624160777572354875625503811168240060144404381782532731747344361636381195322953833511355431708115960517850363668467732859378452319744244754189705176591797980699728768894888776273098873237375908148750504573178096251637132279732290029080034917390851159718996069867384057524634361867451078210323154806935160062513887899020538632350719578957221218762625988338233522900425764882381207240722674803484256371990031477603784632430434075343952218821448873158758760259077397922975757953735064291924684701700383120505009176657075834209273037908753324078050945056651597552104952664855941872449222161542832136880323939394014264995176092751280620673551723331208577960453876924923755340564701453016713590166028324696751231085985884240222167593347334526263303037916609526590361628275094514687712979547371657019216768348669940844962684915105995807144581550267466768607900288997226458836794359699020464423731084729515154927619118848472118259301156549275391180883502559594450767573982988933806622483582100752977021911865196145152803953417231772013838628271297216496382745313147623777787545601193971231801073102166081571418283792593282745084673717170570311045377504502284479416196840733756305173220061186402909252416023762563344143764956029112654501658894183721617190636706196102146327745427411573664267478610548114494490049701326681466073235027601469575864652759810903283362563811874506460304920716945160547124445139612696233397054113663378176432693167172174324788120020498949799252604115536513853848262142313920128414259368279443832662271152360297173930646598210564674468705978287574339360244225115375618646198655959556280703437804726344639166084401515545027901284172772594924370056965764537173873096051299395266611814969942972446937104374365814436535553437638172469618344861812949854558849812664215334381772718093108970359582607762182530978586011606431206539270246528340251461663568777312665664372314290610998078251132725518693529082410739556958543548525453707936098381671273577525790074909555360813881034617350711745676369290608241723750100354970106149571977139199099246359065033480164509524755309789212426564987013135305339916928676198868262047064684760709433781635772354068612627551149096062556283756591960503706614301481072163106357293601120215712910962780320764010922253732701739505753777925668721137680859409919296558240509140850139708613990151410104328354063372667467067274819461968988824720951115052103399330025052273347500202856736346707384583901599334942268514999353369220365516871691405825741537268724538008583607648929752017570278626326151302560754685495028393678419262128727319250428386913197576633827464717820878289888579781924835957478890210814594606277052757358686187249587833483622951068755564437706268645919720898812154651410735166469301589965697476758067194636020452303250497949048947399883127275733209713104883264862130618398438300031458732794354541218179182692182949013878301564321481423815928645752291194790291300506635648891720930673414441649427368858727539840128657434212664708614252838891346368857902932357270177886061675600124771866970699942139129985509310786171897907713767025490553617452052324190314230443669713785943929520934640464416671176139062034948722091493965189712072792638835666067743532362554736033778616139422395438938944605811706580880420836614049374657066594246393012966219639062789307544592960174860630795820249954853388936995742898065294246733938102175776059529094912831231797891546390571057749606999349996810181557492618640128215744807587466320221438600412521428466916484908092508563270571335405686177916252953143575335641923049301557353017574575315800626626939667724977283350476378690544602400232622622606984439469645646912594417064906111761643056936695157678048364605212059547317525838488465251538119345419979627752159611803463974561223291334210165604062771592587817061728345698629469530077932541521870102279760384499807979877285590410184415905645947383083105790145978931820171516152080500903184835361062491319185763169442515370923471198674337350461697251811045075909288347136691842306340831907917252439136412062563991015509661175647955551494200111528584410842714112893660931587222547527616371447626907477263138994491219951425656610431931653530106776137603833078393623616256283714563444092455070819135182372571411642399666607859039700751818268082294407317787468307510454272859459361639319979293997084018517407055270237114922624894768464359698724807022283865063570179483291145554841647601059067178556847880390815917137788528020328496013081698320174206083993477134242184345417718684421898434176286183306074297397337394378635818040034822140823705679673305304460208977733857268729121898133230944150931434375503975562627800112089417314200987543199614195325678616295902673204032176076607741253741011953899538950353479401701480978109520837367985644204216226079933908944509320472574034339086658841246013841750123876174304679348186657771224594878774792577476351726916884715747652858200960751333538695549872163988000264532075579235359661317563583521988757053827631636808305880569746716283687194118275915928060447077646581456256839985578728945837051179362571449947348159120582527720210320816824370932805266651927288698009547480142504810428454261511435444743728876175627914098669648063196082808198168469420588173819431297620345075913670651853432169177514148111886459795089429969643832554329992461199712957262962023969219032890174902935953126450366971415811499887844992885605846137934153585373646778724962248920989408566923423587556265193045579464470040331860146021474495993513170797583044448771741365214872568116252634674100076242158561453923395526895656905772931330601248536544975755715095764080696461966467575052492961263728205392340905646916958065447157660255882585819023423114809694122214668524218426504844940638948658914245639927512262303170595924131913084701462263664582335366579733760671407937763694121917898012253202550794445927090056988580987161070251889864283474072790532666000445210799879898795369575601310701000600506735376838711381823879045908375392524259853266319554558572588187561880636974923425500452774001254800799279088468508982839057565328297629505098869916759252131884099115322420686108894783264515139811150209926303957155203500393727027411079117369478937095384712003637406693041168456532590381021805048371107896453595203099293812662714637405025074568828822557880697107157708023383177045107932793985761637095123260953060223303469977176881187266346286506759842379165512015006845041184833055602957447462579518605453908265316222905883648379800344280559713700655734203702709055921414200515024650167935251509501402436061376649103597691145127922934267080064403467326795745195948481361947814886969942673557755096669771873496442918230266249855317268651317823644283800930551559885321061219165671786041281110803227612135737813344806675638712573522540330326752464442386379900620750588198544947113799155493133901793000917834934968229504797669239833050649010268588703408635567999483106225365924725096344849106407354596440471549184675431400247646054497566794504464730489228246171177238763846374129323806353067143453547105684101405874350776205012855998370519788550563353055706151297118603093875039708128437347187128159250402631828887145334311373552557223689628363908560011768895131535294161055044642175226187415342324320677763066911181419980149855416104489931529489458659833547172890548612497344779808640595096229937705251106163138658308234789274625008958442163643654994384491346591453337999940340102822545663315950182058410804877289936327981680704769212059417689650218871786818104993012530393359782797076272952876972564899611799589468478404319021053066185948310785346220896419939008967567342765319314502669727526379972481519742277811246822238899767398834228515625e-4951
+-1.82259976594123730126420296680970990819952540784678167186049024351418584431669886840478035431291360259862367367360176555098349281631101608498675403779490450274191129058896583928461263190281677987831078128299170536447015989677676363429562039997708640550775926919152302738435771122464765292985913410713131103376617773042203403962987686984411316948595140667733210597864690600010838133614601613871681951542280276489775942764960612766058558174381456923146501775692637508015664228929367328342904167452656185259699435199165429391997316125073430122973318829343522821181735512119859732943017878403356723899138210986814640887564778026842288063392332395425873162546186801975636139070797668304819972220170105852674422401098888180221895434381162451705845464727526614177730212750823552425549507762484741018808753638726079896241463208233641468961241718926107442376223082667022657044926746945053999973304249789647043354111258394904631316614206681676861518285530333635550805084849345427276340804672339278791177264322833523245464353153129378096510959641978734303986620037096633539629329212395162630085725125582600936685277823883492820153083593049415051104450437620211914690606070787926358977364081411635544299722928735751692643879771301240039585999097767207595829950175191441110017783298397938554546884420461552538187244104722816024213635806139907491818083029479760454178844362711626647761487494632027538147971912063924809690969103877295273058627398067023490884558283804713066036286365630374146882657021080984305152976459971071596872478304966869803153760915112192273767083898623101906331345170408354325877269319107750447803297770519645747631196394042357976659226774333324024028170376571419266465026123884210852547563237372731787743310739247077115755551931534219571260621965209529206118711148614230326874252623232432768485954951338025914378049849860538923653349006471371371975851619548239568383911087481548770985671906958133943927799958876422544137402326929408872363515336911744925148845142650068227520261364354697002916289429272868432749597813293152504173604381153301045168945974496048759541471080100519101973888604170033075957748634771829115251095545428834602408676747944708548838154240391870140692461377047103665770055763116743840798104372065112827921945625030361510289100654183705651174880622260739758549192434399417410164472062845437778260804090757560281944655628120766454222846704757309223464545058305531743779508241780347081470374488718989636990233738212174195604234593588461272325314215528265459543623864312796269176427251818027542711345978562318056661295241015095829415854218885612968394742320564741129353791774349282275541494026428939134920627812463726111753054622717119310116356020391377016695730659609458715794206834400971798313683173521572022151606820588780251530071841853198634516520873759366510045598375024838080906130739822646856203519935194543445776352574523286837269888247054743973982471908128830717347432604265401234817912837829289728424665952102694142190409017939355538720903773940059325978870813594819158491785411281829232728432185130930121677446908186036638626917272725653250577033788275532848525020676860268503396244010460868170366183668422400245220420698887085348274712352039989322593091109423678562877840971664204374301183812473393474181569023692824311977350780165916130639182603434989926970020331865584136555767033892083012035521577557018520518779278646965154203692177035106027598152525747997287067958495583828773920163969005601017367414626907539916022639742121376325089842645593155408913831923616011893504143113588169809756975685615156809718301077041526572845529202418627301258888257023010355646157596158820107337643411098344495769079824062658034841113036159712976090652715172861118398396463438153644617763942735713912193155539153353006222951965776408842015246576140657437291217544606529750759900127860216624160777572354875625503811168240060144404381782532731747344361636381195322953833511355431708115960517850363668467732859378452319744244754189705176591797980699728768894888776273098873237375908148750504573178096251637132279732290029080034917390851159718996069867384057524634361867451078210323154806935160062513887899020538632350719578957221218762625988338233522900425764882381207240722674803484256371990031477603784632430434075343952218821448873158758760259077397922975757953735064291924684701700383120505009176657075834209273037908753324078050945056651597552104952664855941872449222161542832136880323939394014264995176092751280620673551723331208577960453876924923755340564701453016713590166028324696751231085985884240222167593347334526263303037916609526590361628275094514687712979547371657019216768348669940844962684915105995807144581550267466768607900288997226458836794359699020464423731084729515154927619118848472118259301156549275391180883502559594450767573982988933806622483582100752977021911865196145152803953417231772013838628271297216496382745313147623777787545601193971231801073102166081571418283792593282745084673717170570311045377504502284479416196840733756305173220061186402909252416023762563344143764956029112654501658894183721617190636706196102146327745427411573664267478610548114494490049701326681466073235027601469575864652759810903283362563811874506460304920716945160547124445139612696233397054113663378176432693167172174324788120020498949799252604115536513853848262142313920128414259368279443832662271152360297173930646598210564674468705978287574339360244225115375618646198655959556280703437804726344639166084401515545027901284172772594924370056965764537173873096051299395266611814969942972446937104374365814436535553437638172469618344861812949854558849812664215334381772718093108970359582607762182530978586011606431206539270246528340251461663568777312665664372314290610998078251132725518693529082410739556958543548525453707936098381671273577525790074909555360813881034617350711745676369290608241723750100354970106149571977139199099246359065033480164509524755309789212426564987013135305339916928676198868262047064684760709433781635772354068612627551149096062556283756591960503706614301481072163106357293601120215712910962780320764010922253732701739505753777925668721137680859409919296558240509140850139708613990151410104328354063372667467067274819461968988824720951115052103399330025052273347500202856736346707384583901599334942268514999353369220365516871691405825741537268724538008583607648929752017570278626326151302560754685495028393678419262128727319250428386913197576633827464717820878289888579781924835957478890210814594606277052757358686187249587833483622951068755564437706268645919720898812154651410735166469301589965697476758067194636020452303250497949048947399883127275733209713104883264862130618398438300031458732794354541218179182692182949013878301564321481423815928645752291194790291300506635648891720930673414441649427368858727539840128657434212664708614252838891346368857902932357270177886061675600124771866970699942139129985509310786171897907713767025490553617452052324190314230443669713785943929520934640464416671176139062034948722091493965189712072792638835666067743532362554736033778616139422395438938944605811706580880420836614049374657066594246393012966219639062789307544592960174860630795820249954853388936995742898065294246733938102175776059529094912831231797891546390571057749606999349996810181557492618640128215744807587466320221438600412521428466916484908092508563270571335405686177916252953143575335641923049301557353017574575315800626626939667724977283350476378690544602400232622622606984439469645646912594417064906111761643056936695157678048364605212059547317525838488465251538119345419979627752159611803463974561223291334210165604062771592587817061728345698629469530077932541521870102279760384499807979877285590410184415905645947383083105790145978931820171516152080500903184835361062491319185763169442515370923471198674337350461697251811045075909288347136691842306340831907917252439136412062563991015509661175647955551494200111528584410842714112893660931587222547527616371447626907477263138994491219951425656610431931653530106776137603833078393623616256283714563444092455070819135182372571411642399666607859039700751818268082294407317787468307510454272859459361639319979293997084018517407055270237114922624894768464359698724807022283865063570179483291145554841647601059067178556847880390815917137788528020328496013081698320174206083993477134242184345417718684421898434176286183306074297397337394378635818040034822140823705679673305304460208977733857268729121898133230944150931434375503975562627800112089417314200987543199614195325678616295902673204032176076607741253741011953899538950353479401701480978109520837367985644204216226079933908944509320472574034339086658841246013841750123876174304679348186657771224594878774792577476351726916884715747652858200960751333538695549872163988000264532075579235359661317563583521988757053827631636808305880569746716283687194118275915928060447077646581456256839985578728945837051179362571449947348159120582527720210320816824370932805266651927288698009547480142504810428454261511435444743728876175627914098669648063196082808198168469420588173819431297620345075913670651853432169177514148111886459795089429969643832554329992461199712957262962023969219032890174902935953126450366971415811499887844992885605846137934153585373646778724962248920989408566923423587556265193045579464470040331860146021474495993513170797583044448771741365214872568116252634674100076242158561453923395526895656905772931330601248536544975755715095764080696461966467575052492961263728205392340905646916958065447157660255882585819023423114809694122214668524218426504844940638948658914245639927512262303170595924131913084701462263664582335366579733760671407937763694121917898012253202550794445927090056988580987161070251889864283474072790532666000445210799879898795369575601310701000600506735376838711381823879045908375392524259853266319554558572588187561880636974923425500452774001254800799279088468508982839057565328297629505098869916759252131884099115322420686108894783264515139811150209926303957155203500393727027411079117369478937095384712003637406693041168456532590381021805048371107896453595203099293812662714637405025074568828822557880697107157708023383177045107932793985761637095123260953060223303469977176881187266346286506759842379165512015006845041184833055602957447462579518605453908265316222905883648379800344280559713700655734203702709055921414200515024650167935251509501402436061376649103597691145127922934267080064403467326795745195948481361947814886969942673557755096669771873496442918230266249855317268651317823644283800930551559885321061219165671786041281110803227612135737813344806675638712573522540330326752464442386379900620750588198544947113799155493133901793000917834934968229504797669239833050649010268588703408635567999483106225365924725096344849106407354596440471549184675431400247646054497566794504464730489228246171177238763846374129323806353067143453547105684101405874350776205012855998370519788550563353055706151297118603093875039708128437347187128159250402631828887145334311373552557223689628363908560011768895131535294161055044642175226187415342324320677763066911181419980149855416104489931529489458659833547172890548612497344779808640595096229937705251106163138658308234789274625008958442163643654994384491346591453337999940340102822545663315950182058410804877289936327981680704769212059417689650218871786818104993012530393359782797076272952876972564899611799589468478404319021053066185948310785346220896419939008967567342765319314502669727526379972481519742277811246822238899767398834228515626e-4951
+9.11299882970618650632101483404854954099762703923390835930245121757092922158349434202390177156456801299311836836800882775491746408155508042493377018897452251370955645294482919642306315951408389939155390641495852682235079948388381817147810199988543202753879634595761513692178855612323826464929567053565655516883088865211017019814938434922056584742975703338666052989323453000054190668073008069358409757711401382448879713824803063830292790871907284615732508878463187540078321144646836641714520837263280926298497175995827146959986580625367150614866594146717614105908677560599298664715089392016783619495691054934073204437823890134211440316961661977129365812730934009878180695353988341524099861100850529263372112005494440901109477171905812258529227323637633070888651063754117762127747538812423705094043768193630399481207316041168207344806208594630537211881115413335113285224633734725269999866521248948235216770556291974523156583071033408384307591427651668177754025424246727136381704023361696393955886321614167616227321765765646890482554798209893671519933100185483167698146646061975813150428625627913004683426389119417464100765417965247075255522252188101059573453030353939631794886820407058177721498614643678758463219398856506200197929995488836037979149750875957205550088916491989692772734422102307762690936220523614080121068179030699537459090415147398802270894221813558133238807437473160137690739859560319624048454845519386476365293136990335117454422791419023565330181431828151870734413285105404921525764882299855357984362391524834349015768804575560961368835419493115509531656725852041771629386346595538752239016488852598228738155981970211789883296133871666620120140851882857096332325130619421054262737816186863658938716553696235385578777759657671097856303109826047646030593555743071151634371263116162163842429774756690129571890249249302694618266745032356856859879258097741197841919555437407743854928359534790669719638999794382112720687011634647044361817576684558724625744225713250341137601306821773485014581447146364342163747989066465762520868021905766505225844729872480243797707355400502595509869443020850165379788743173859145576255477727144173012043383739723542744190771201959350703462306885235518328850278815583719203990521860325564139609728125151807551445503270918528255874403111303698792745962171997087050822360314227188891304020453787801409723278140603832271114233523786546117322725291527658718897541208901735407351872443594948184951168691060870978021172967942306361626571077641327297718119321563981345882136259090137713556729892811590283306476205075479147079271094428064841973711602823705646768958871746411377707470132144695674603139062318630558765273113585596550581780101956885083478653298047293578971034172004858991568415867607860110758034102943901257650359209265993172582604368796832550227991875124190404530653699113234281017599675972717228881762872616434186349441235273719869912359540644153586737163021327006174089564189146448642123329760513470710952045089696777693604518869700296629894354067974095792458927056409146163642160925654650608387234540930183193134586363628266252885168941377664242625103384301342516981220052304340851830918342112001226102103494435426741373561760199946612965455547118392814389204858321021871505919062366967370907845118464121559886753900829580653195913017174949634850101659327920682778835169460415060177607887785092602593896393234825771018460885175530137990762628739986435339792477919143869600819845028005086837073134537699580113198710606881625449213227965777044569159618080059467520715567940849048784878428075784048591505385207632864227646012093136506294441285115051778230787980794100536688217055491722478845399120313290174205565180798564880453263575864305591991982317190768223088819713678569560965777695766765031114759828882044210076232880703287186456087723032648753799500639301083120803887861774378127519055841200300722021908912663658736721808181905976614769167556777158540579802589251818342338664296892261598721223770948525882958989903498643844474443881365494366186879540743752522865890481258185661398661450145400174586954255798594980349336920287623171809337255391051615774034675800312569439495102693161753597894786106093813129941691167614502128824411906036203613374017421281859950157388018923162152170376719761094107244365793793801295386989614878789768675321459623423508501915602525045883285379171046365189543766620390254725283257987760524763324279709362246110807714160684401619696970071324975880463756403103367758616656042889802269384624618776702823507265083567950830141623483756155429929421201110837966736672631316515189583047632951808141375472573438564897736858285096083841743349704224813424575529979035722907751337333843039501444986132294183971798495102322118655423647575774638095594242360591296505782746376955904417512797972253837869914944669033112417910503764885109559325980725764019767086158860069193141356486082481913726565738118888937728005969856159005365510830407857091418962966413725423368585852851555226887522511422397080984203668781525866100305932014546262080118812816720718824780145563272508294470918608085953183530980510731638727137057868321337393052740572472450248506633407330366175138007347879323263799054516416812819059372532301524603584725802735622225698063481166985270568316890882163465835860871623940600102494748996263020577682569269241310711569600642071296841397219163311355761801485869653232991052823372343529891437871696801221125576878093230993279797781403517189023631723195830422007577725139506420863862974621850284828822685869365480256496976333059074849714862234685521871829072182677767188190862348091724309064749272794249063321076671908863590465544851797913038810912654892930058032156032696351232641701257308317843886563328321861571453054990391255663627593467645412053697784792717742627268539680491908356367887628950374547776804069405173086753558728381846453041208618750501774850530747859885695995496231795325167400822547623776548946062132824935065676526699584643380994341310235323423803547168908178861770343063137755745480312781418782959802518533071507405360815531786468005601078564554813901603820054611268663508697528768889628343605688404297049596482791202545704250698543069950757050521641770316863337335336374097309844944123604755575260516996650125261366737501014283681733536922919507996674711342574996766846101827584358457029128707686343622690042918038244648760087851393131630756512803773427475141968392096310643636596252141934565987883169137323589104391449442898909624179787394451054072973031385263786793430936247939167418114755343777822188531343229598604494060773257053675832346507949828487383790335973180102261516252489745244736999415636378666048565524416324310653091992191500157293663971772706090895913460914745069391507821607407119079643228761455973951456502533178244458604653367072208247136844293637699200643287171063323543071264194456731844289514661786350889430308378000623859334853499710695649927546553930859489538568835127452768087260261620951571152218348568929719647604673202322083355880695310174743610457469825948560363963194178330338717661812773680168893080697111977194694723029058532904402104183070246873285332971231965064831098195313946537722964800874303153979101249774266944684978714490326471233669690510878880297645474564156158989457731952855288748034996749984050907787463093200641078724037937331601107193002062607142334582424540462542816352856677028430889581264765717876678209615246507786765087872876579003133134698338624886416752381893452723012001163113113034922197348228234562972085324530558808215284683475788390241823026060297736587629192442326257690596727099898138760798059017319872806116456671050828020313857962939085308641728493147347650389662707609350511398801922499039899386427952050922079528229736915415528950729894659100857580760402504515924176805312456595928815847212576854617355993371686752308486259055225379546441735683459211531704159539586262195682060312819955077548305878239777757471000557642922054213570564468304657936112737638081857238134537386315694972456099757128283052159658267650533880688019165391968118081281418572817220462275354095675911862857058211998333039295198503759091340411472036588937341537552271364297296808196599896469985420092587035276351185574613124473842321798493624035111419325317850897416455727774208238005295335892784239401954079585688942640101642480065408491600871030419967385671210921727088593422109492170881430916530371486986686971893179090200174110704118528398366526522301044888669286343645609490666154720754657171877519877813139000560447086571004937715998070976628393081479513366020160880383038706268705059769497694751767397008507404890547604186839928221021081130399669544722546602362870171695433294206230069208750619380871523396740933288856122974393873962887381758634584423578738264291004803756667693477749360819940001322660377896176798306587817917609943785269138158184041529402848733581418435970591379579640302235388232907281284199927893644729185255896812857249736740795602912638601051604084121854664026333259636443490047737400712524052142271307557177223718644380878139570493348240315980414040990842347102940869097156488101725379568353259267160845887570740559432298975447149848219162771649962305998564786314810119846095164450874514679765632251834857079057499439224964428029230689670767926868233893624811244604947042834617117937781325965227897322350201659300730107372479967565853987915222243858706826074362840581263173370500381210792807269616977634478284528864656653006242682724878778575478820403482309832337875262464806318641026961704528234584790327235788301279412929095117115574048470611073342621092132524224703194743294571228199637561311515852979620659565423507311318322911676832898668803357039688818470609589490061266012753972229635450284942904935805351259449321417370363952663330002226053999399493976847878006553505003002533676884193556909119395229541876962621299266331597772792862940937809403184874617127502263870006274003996395442342544914195287826641488147525494349583796260659420495576612103430544473916322575699055751049631519785776017501968635137055395586847394685476923560018187033465205842282662951905109025241855539482267976015496469063313573187025125372844144112789403485535788540116915885225539663969928808185475616304765301116517349885884405936331731432533799211895827560075034225205924165278014787237312897593027269541326581114529418241899001721402798568503278671018513545279607071002575123250839676257547507012180306883245517988455725639614671335400322017336633978725979742406809739074434849713367788775483348859367482214591151331249276586343256589118221419004652757799426605306095828358930206405554016138060678689066724033378193562867612701651633762322211931899503103752940992724735568995777465669508965004589174674841147523988346199165253245051342943517043177839997415531126829623625481724245532036772982202357745923377157001238230272487833972522323652446141230855886193819231870646619031765335717267735528420507029371753881025064279991852598942752816765278530756485593015469375198540642186735935640796252013159144435726671556867762786118448141819542800058844475657676470805275223210876130937076711621603388815334555907099900749277080522449657647447293299167735864452743062486723899043202975481149688526255530815693291541173946373125044792210818218274971922456732957266689999701700514112728316579750910292054024386449681639908403523846060297088448251094358934090524965062651966798913985381364764384862824498058997947342392021595105265330929741553926731104482099695044837836713826596572513348637631899862407598711389056234111194498836994171142578124e-4952
+9.11299882970618650632101483404854954099762703923390835930245121757092922158349434202390177156456801299311836836800882775491746408155508042493377018897452251370955645294482919642306315951408389939155390641495852682235079948388381817147810199988543202753879634595761513692178855612323826464929567053565655516883088865211017019814938434922056584742975703338666052989323453000054190668073008069358409757711401382448879713824803063830292790871907284615732508878463187540078321144646836641714520837263280926298497175995827146959986580625367150614866594146717614105908677560599298664715089392016783619495691054934073204437823890134211440316961661977129365812730934009878180695353988341524099861100850529263372112005494440901109477171905812258529227323637633070888651063754117762127747538812423705094043768193630399481207316041168207344806208594630537211881115413335113285224633734725269999866521248948235216770556291974523156583071033408384307591427651668177754025424246727136381704023361696393955886321614167616227321765765646890482554798209893671519933100185483167698146646061975813150428625627913004683426389119417464100765417965247075255522252188101059573453030353939631794886820407058177721498614643678758463219398856506200197929995488836037979149750875957205550088916491989692772734422102307762690936220523614080121068179030699537459090415147398802270894221813558133238807437473160137690739859560319624048454845519386476365293136990335117454422791419023565330181431828151870734413285105404921525764882299855357984362391524834349015768804575560961368835419493115509531656725852041771629386346595538752239016488852598228738155981970211789883296133871666620120140851882857096332325130619421054262737816186863658938716553696235385578777759657671097856303109826047646030593555743071151634371263116162163842429774756690129571890249249302694618266745032356856859879258097741197841919555437407743854928359534790669719638999794382112720687011634647044361817576684558724625744225713250341137601306821773485014581447146364342163747989066465762520868021905766505225844729872480243797707355400502595509869443020850165379788743173859145576255477727144173012043383739723542744190771201959350703462306885235518328850278815583719203990521860325564139609728125151807551445503270918528255874403111303698792745962171997087050822360314227188891304020453787801409723278140603832271114233523786546117322725291527658718897541208901735407351872443594948184951168691060870978021172967942306361626571077641327297718119321563981345882136259090137713556729892811590283306476205075479147079271094428064841973711602823705646768958871746411377707470132144695674603139062318630558765273113585596550581780101956885083478653298047293578971034172004858991568415867607860110758034102943901257650359209265993172582604368796832550227991875124190404530653699113234281017599675972717228881762872616434186349441235273719869912359540644153586737163021327006174089564189146448642123329760513470710952045089696777693604518869700296629894354067974095792458927056409146163642160925654650608387234540930183193134586363628266252885168941377664242625103384301342516981220052304340851830918342112001226102103494435426741373561760199946612965455547118392814389204858321021871505919062366967370907845118464121559886753900829580653195913017174949634850101659327920682778835169460415060177607887785092602593896393234825771018460885175530137990762628739986435339792477919143869600819845028005086837073134537699580113198710606881625449213227965777044569159618080059467520715567940849048784878428075784048591505385207632864227646012093136506294441285115051778230787980794100536688217055491722478845399120313290174205565180798564880453263575864305591991982317190768223088819713678569560965777695766765031114759828882044210076232880703287186456087723032648753799500639301083120803887861774378127519055841200300722021908912663658736721808181905976614769167556777158540579802589251818342338664296892261598721223770948525882958989903498643844474443881365494366186879540743752522865890481258185661398661450145400174586954255798594980349336920287623171809337255391051615774034675800312569439495102693161753597894786106093813129941691167614502128824411906036203613374017421281859950157388018923162152170376719761094107244365793793801295386989614878789768675321459623423508501915602525045883285379171046365189543766620390254725283257987760524763324279709362246110807714160684401619696970071324975880463756403103367758616656042889802269384624618776702823507265083567950830141623483756155429929421201110837966736672631316515189583047632951808141375472573438564897736858285096083841743349704224813424575529979035722907751337333843039501444986132294183971798495102322118655423647575774638095594242360591296505782746376955904417512797972253837869914944669033112417910503764885109559325980725764019767086158860069193141356486082481913726565738118888937728005969856159005365510830407857091418962966413725423368585852851555226887522511422397080984203668781525866100305932014546262080118812816720718824780145563272508294470918608085953183530980510731638727137057868321337393052740572472450248506633407330366175138007347879323263799054516416812819059372532301524603584725802735622225698063481166985270568316890882163465835860871623940600102494748996263020577682569269241310711569600642071296841397219163311355761801485869653232991052823372343529891437871696801221125576878093230993279797781403517189023631723195830422007577725139506420863862974621850284828822685869365480256496976333059074849714862234685521871829072182677767188190862348091724309064749272794249063321076671908863590465544851797913038810912654892930058032156032696351232641701257308317843886563328321861571453054990391255663627593467645412053697784792717742627268539680491908356367887628950374547776804069405173086753558728381846453041208618750501774850530747859885695995496231795325167400822547623776548946062132824935065676526699584643380994341310235323423803547168908178861770343063137755745480312781418782959802518533071507405360815531786468005601078564554813901603820054611268663508697528768889628343605688404297049596482791202545704250698543069950757050521641770316863337335336374097309844944123604755575260516996650125261366737501014283681733536922919507996674711342574996766846101827584358457029128707686343622690042918038244648760087851393131630756512803773427475141968392096310643636596252141934565987883169137323589104391449442898909624179787394451054072973031385263786793430936247939167418114755343777822188531343229598604494060773257053675832346507949828487383790335973180102261516252489745244736999415636378666048565524416324310653091992191500157293663971772706090895913460914745069391507821607407119079643228761455973951456502533178244458604653367072208247136844293637699200643287171063323543071264194456731844289514661786350889430308378000623859334853499710695649927546553930859489538568835127452768087260261620951571152218348568929719647604673202322083355880695310174743610457469825948560363963194178330338717661812773680168893080697111977194694723029058532904402104183070246873285332971231965064831098195313946537722964800874303153979101249774266944684978714490326471233669690510878880297645474564156158989457731952855288748034996749984050907787463093200641078724037937331601107193002062607142334582424540462542816352856677028430889581264765717876678209615246507786765087872876579003133134698338624886416752381893452723012001163113113034922197348228234562972085324530558808215284683475788390241823026060297736587629192442326257690596727099898138760798059017319872806116456671050828020313857962939085308641728493147347650389662707609350511398801922499039899386427952050922079528229736915415528950729894659100857580760402504515924176805312456595928815847212576854617355993371686752308486259055225379546441735683459211531704159539586262195682060312819955077548305878239777757471000557642922054213570564468304657936112737638081857238134537386315694972456099757128283052159658267650533880688019165391968118081281418572817220462275354095675911862857058211998333039295198503759091340411472036588937341537552271364297296808196599896469985420092587035276351185574613124473842321798493624035111419325317850897416455727774208238005295335892784239401954079585688942640101642480065408491600871030419967385671210921727088593422109492170881430916530371486986686971893179090200174110704118528398366526522301044888669286343645609490666154720754657171877519877813139000560447086571004937715998070976628393081479513366020160880383038706268705059769497694751767397008507404890547604186839928221021081130399669544722546602362870171695433294206230069208750619380871523396740933288856122974393873962887381758634584423578738264291004803756667693477749360819940001322660377896176798306587817917609943785269138158184041529402848733581418435970591379579640302235388232907281284199927893644729185255896812857249736740795602912638601051604084121854664026333259636443490047737400712524052142271307557177223718644380878139570493348240315980414040990842347102940869097156488101725379568353259267160845887570740559432298975447149848219162771649962305998564786314810119846095164450874514679765632251834857079057499439224964428029230689670767926868233893624811244604947042834617117937781325965227897322350201659300730107372479967565853987915222243858706826074362840581263173370500381210792807269616977634478284528864656653006242682724878778575478820403482309832337875262464806318641026961704528234584790327235788301279412929095117115574048470611073342621092132524224703194743294571228199637561311515852979620659565423507311318322911676832898668803357039688818470609589490061266012753972229635450284942904935805351259449321417370363952663330002226053999399493976847878006553505003002533676884193556909119395229541876962621299266331597772792862940937809403184874617127502263870006274003996395442342544914195287826641488147525494349583796260659420495576612103430544473916322575699055751049631519785776017501968635137055395586847394685476923560018187033465205842282662951905109025241855539482267976015496469063313573187025125372844144112789403485535788540116915885225539663969928808185475616304765301116517349885884405936331731432533799211895827560075034225205924165278014787237312897593027269541326581114529418241899001721402798568503278671018513545279607071002575123250839676257547507012180306883245517988455725639614671335400322017336633978725979742406809739074434849713367788775483348859367482214591151331249276586343256589118221419004652757799426605306095828358930206405554016138060678689066724033378193562867612701651633762322211931899503103752940992724735568995777465669508965004589174674841147523988346199165253245051342943517043177839997415531126829623625481724245532036772982202357745923377157001238230272487833972522323652446141230855886193819231870646619031765335717267735528420507029371753881025064279991852598942752816765278530756485593015469375198540642186735935640796252013159144435726671556867762786118448141819542800058844475657676470805275223210876130937076711621603388815334555907099900749277080522449657647447293299167735864452743062486723899043202975481149688526255530815693291541173946373125044792210818218274971922456732957266689999701700514112728316579750910292054024386449681639908403523846060297088448251094358934090524965062651966798913985381364764384862824498058997947342392021595105265330929741553926731104482099695044837836713826596572513348637631899862407598711389056234111194498836994171142578125e-4952
+9.11299882970618650632101483404854954099762703923390835930245121757092922158349434202390177156456801299311836836800882775491746408155508042493377018897452251370955645294482919642306315951408389939155390641495852682235079948388381817147810199988543202753879634595761513692178855612323826464929567053565655516883088865211017019814938434922056584742975703338666052989323453000054190668073008069358409757711401382448879713824803063830292790871907284615732508878463187540078321144646836641714520837263280926298497175995827146959986580625367150614866594146717614105908677560599298664715089392016783619495691054934073204437823890134211440316961661977129365812730934009878180695353988341524099861100850529263372112005494440901109477171905812258529227323637633070888651063754117762127747538812423705094043768193630399481207316041168207344806208594630537211881115413335113285224633734725269999866521248948235216770556291974523156583071033408384307591427651668177754025424246727136381704023361696393955886321614167616227321765765646890482554798209893671519933100185483167698146646061975813150428625627913004683426389119417464100765417965247075255522252188101059573453030353939631794886820407058177721498614643678758463219398856506200197929995488836037979149750875957205550088916491989692772734422102307762690936220523614080121068179030699537459090415147398802270894221813558133238807437473160137690739859560319624048454845519386476365293136990335117454422791419023565330181431828151870734413285105404921525764882299855357984362391524834349015768804575560961368835419493115509531656725852041771629386346595538752239016488852598228738155981970211789883296133871666620120140851882857096332325130619421054262737816186863658938716553696235385578777759657671097856303109826047646030593555743071151634371263116162163842429774756690129571890249249302694618266745032356856859879258097741197841919555437407743854928359534790669719638999794382112720687011634647044361817576684558724625744225713250341137601306821773485014581447146364342163747989066465762520868021905766505225844729872480243797707355400502595509869443020850165379788743173859145576255477727144173012043383739723542744190771201959350703462306885235518328850278815583719203990521860325564139609728125151807551445503270918528255874403111303698792745962171997087050822360314227188891304020453787801409723278140603832271114233523786546117322725291527658718897541208901735407351872443594948184951168691060870978021172967942306361626571077641327297718119321563981345882136259090137713556729892811590283306476205075479147079271094428064841973711602823705646768958871746411377707470132144695674603139062318630558765273113585596550581780101956885083478653298047293578971034172004858991568415867607860110758034102943901257650359209265993172582604368796832550227991875124190404530653699113234281017599675972717228881762872616434186349441235273719869912359540644153586737163021327006174089564189146448642123329760513470710952045089696777693604518869700296629894354067974095792458927056409146163642160925654650608387234540930183193134586363628266252885168941377664242625103384301342516981220052304340851830918342112001226102103494435426741373561760199946612965455547118392814389204858321021871505919062366967370907845118464121559886753900829580653195913017174949634850101659327920682778835169460415060177607887785092602593896393234825771018460885175530137990762628739986435339792477919143869600819845028005086837073134537699580113198710606881625449213227965777044569159618080059467520715567940849048784878428075784048591505385207632864227646012093136506294441285115051778230787980794100536688217055491722478845399120313290174205565180798564880453263575864305591991982317190768223088819713678569560965777695766765031114759828882044210076232880703287186456087723032648753799500639301083120803887861774378127519055841200300722021908912663658736721808181905976614769167556777158540579802589251818342338664296892261598721223770948525882958989903498643844474443881365494366186879540743752522865890481258185661398661450145400174586954255798594980349336920287623171809337255391051615774034675800312569439495102693161753597894786106093813129941691167614502128824411906036203613374017421281859950157388018923162152170376719761094107244365793793801295386989614878789768675321459623423508501915602525045883285379171046365189543766620390254725283257987760524763324279709362246110807714160684401619696970071324975880463756403103367758616656042889802269384624618776702823507265083567950830141623483756155429929421201110837966736672631316515189583047632951808141375472573438564897736858285096083841743349704224813424575529979035722907751337333843039501444986132294183971798495102322118655423647575774638095594242360591296505782746376955904417512797972253837869914944669033112417910503764885109559325980725764019767086158860069193141356486082481913726565738118888937728005969856159005365510830407857091418962966413725423368585852851555226887522511422397080984203668781525866100305932014546262080118812816720718824780145563272508294470918608085953183530980510731638727137057868321337393052740572472450248506633407330366175138007347879323263799054516416812819059372532301524603584725802735622225698063481166985270568316890882163465835860871623940600102494748996263020577682569269241310711569600642071296841397219163311355761801485869653232991052823372343529891437871696801221125576878093230993279797781403517189023631723195830422007577725139506420863862974621850284828822685869365480256496976333059074849714862234685521871829072182677767188190862348091724309064749272794249063321076671908863590465544851797913038810912654892930058032156032696351232641701257308317843886563328321861571453054990391255663627593467645412053697784792717742627268539680491908356367887628950374547776804069405173086753558728381846453041208618750501774850530747859885695995496231795325167400822547623776548946062132824935065676526699584643380994341310235323423803547168908178861770343063137755745480312781418782959802518533071507405360815531786468005601078564554813901603820054611268663508697528768889628343605688404297049596482791202545704250698543069950757050521641770316863337335336374097309844944123604755575260516996650125261366737501014283681733536922919507996674711342574996766846101827584358457029128707686343622690042918038244648760087851393131630756512803773427475141968392096310643636596252141934565987883169137323589104391449442898909624179787394451054072973031385263786793430936247939167418114755343777822188531343229598604494060773257053675832346507949828487383790335973180102261516252489745244736999415636378666048565524416324310653091992191500157293663971772706090895913460914745069391507821607407119079643228761455973951456502533178244458604653367072208247136844293637699200643287171063323543071264194456731844289514661786350889430308378000623859334853499710695649927546553930859489538568835127452768087260261620951571152218348568929719647604673202322083355880695310174743610457469825948560363963194178330338717661812773680168893080697111977194694723029058532904402104183070246873285332971231965064831098195313946537722964800874303153979101249774266944684978714490326471233669690510878880297645474564156158989457731952855288748034996749984050907787463093200641078724037937331601107193002062607142334582424540462542816352856677028430889581264765717876678209615246507786765087872876579003133134698338624886416752381893452723012001163113113034922197348228234562972085324530558808215284683475788390241823026060297736587629192442326257690596727099898138760798059017319872806116456671050828020313857962939085308641728493147347650389662707609350511398801922499039899386427952050922079528229736915415528950729894659100857580760402504515924176805312456595928815847212576854617355993371686752308486259055225379546441735683459211531704159539586262195682060312819955077548305878239777757471000557642922054213570564468304657936112737638081857238134537386315694972456099757128283052159658267650533880688019165391968118081281418572817220462275354095675911862857058211998333039295198503759091340411472036588937341537552271364297296808196599896469985420092587035276351185574613124473842321798493624035111419325317850897416455727774208238005295335892784239401954079585688942640101642480065408491600871030419967385671210921727088593422109492170881430916530371486986686971893179090200174110704118528398366526522301044888669286343645609490666154720754657171877519877813139000560447086571004937715998070976628393081479513366020160880383038706268705059769497694751767397008507404890547604186839928221021081130399669544722546602362870171695433294206230069208750619380871523396740933288856122974393873962887381758634584423578738264291004803756667693477749360819940001322660377896176798306587817917609943785269138158184041529402848733581418435970591379579640302235388232907281284199927893644729185255896812857249736740795602912638601051604084121854664026333259636443490047737400712524052142271307557177223718644380878139570493348240315980414040990842347102940869097156488101725379568353259267160845887570740559432298975447149848219162771649962305998564786314810119846095164450874514679765632251834857079057499439224964428029230689670767926868233893624811244604947042834617117937781325965227897322350201659300730107372479967565853987915222243858706826074362840581263173370500381210792807269616977634478284528864656653006242682724878778575478820403482309832337875262464806318641026961704528234584790327235788301279412929095117115574048470611073342621092132524224703194743294571228199637561311515852979620659565423507311318322911676832898668803357039688818470609589490061266012753972229635450284942904935805351259449321417370363952663330002226053999399493976847878006553505003002533676884193556909119395229541876962621299266331597772792862940937809403184874617127502263870006274003996395442342544914195287826641488147525494349583796260659420495576612103430544473916322575699055751049631519785776017501968635137055395586847394685476923560018187033465205842282662951905109025241855539482267976015496469063313573187025125372844144112789403485535788540116915885225539663969928808185475616304765301116517349885884405936331731432533799211895827560075034225205924165278014787237312897593027269541326581114529418241899001721402798568503278671018513545279607071002575123250839676257547507012180306883245517988455725639614671335400322017336633978725979742406809739074434849713367788775483348859367482214591151331249276586343256589118221419004652757799426605306095828358930206405554016138060678689066724033378193562867612701651633762322211931899503103752940992724735568995777465669508965004589174674841147523988346199165253245051342943517043177839997415531126829623625481724245532036772982202357745923377157001238230272487833972522323652446141230855886193819231870646619031765335717267735528420507029371753881025064279991852598942752816765278530756485593015469375198540642186735935640796252013159144435726671556867762786118448141819542800058844475657676470805275223210876130937076711621603388815334555907099900749277080522449657647447293299167735864452743062486723899043202975481149688526255530815693291541173946373125044792210818218274971922456732957266689999701700514112728316579750910292054024386449681639908403523846060297088448251094358934090524965062651966798913985381364764384862824498058997947342392021595105265330929741553926731104482099695044837836713826596572513348637631899862407598711389056234111194498836994171142578126e-4952
+-9.11299882970618650632101483404854954099762703923390835930245121757092922158349434202390177156456801299311836836800882775491746408155508042493377018897452251370955645294482919642306315951408389939155390641495852682235079948388381817147810199988543202753879634595761513692178855612323826464929567053565655516883088865211017019814938434922056584742975703338666052989323453000054190668073008069358409757711401382448879713824803063830292790871907284615732508878463187540078321144646836641714520837263280926298497175995827146959986580625367150614866594146717614105908677560599298664715089392016783619495691054934073204437823890134211440316961661977129365812730934009878180695353988341524099861100850529263372112005494440901109477171905812258529227323637633070888651063754117762127747538812423705094043768193630399481207316041168207344806208594630537211881115413335113285224633734725269999866521248948235216770556291974523156583071033408384307591427651668177754025424246727136381704023361696393955886321614167616227321765765646890482554798209893671519933100185483167698146646061975813150428625627913004683426389119417464100765417965247075255522252188101059573453030353939631794886820407058177721498614643678758463219398856506200197929995488836037979149750875957205550088916491989692772734422102307762690936220523614080121068179030699537459090415147398802270894221813558133238807437473160137690739859560319624048454845519386476365293136990335117454422791419023565330181431828151870734413285105404921525764882299855357984362391524834349015768804575560961368835419493115509531656725852041771629386346595538752239016488852598228738155981970211789883296133871666620120140851882857096332325130619421054262737816186863658938716553696235385578777759657671097856303109826047646030593555743071151634371263116162163842429774756690129571890249249302694618266745032356856859879258097741197841919555437407743854928359534790669719638999794382112720687011634647044361817576684558724625744225713250341137601306821773485014581447146364342163747989066465762520868021905766505225844729872480243797707355400502595509869443020850165379788743173859145576255477727144173012043383739723542744190771201959350703462306885235518328850278815583719203990521860325564139609728125151807551445503270918528255874403111303698792745962171997087050822360314227188891304020453787801409723278140603832271114233523786546117322725291527658718897541208901735407351872443594948184951168691060870978021172967942306361626571077641327297718119321563981345882136259090137713556729892811590283306476205075479147079271094428064841973711602823705646768958871746411377707470132144695674603139062318630558765273113585596550581780101956885083478653298047293578971034172004858991568415867607860110758034102943901257650359209265993172582604368796832550227991875124190404530653699113234281017599675972717228881762872616434186349441235273719869912359540644153586737163021327006174089564189146448642123329760513470710952045089696777693604518869700296629894354067974095792458927056409146163642160925654650608387234540930183193134586363628266252885168941377664242625103384301342516981220052304340851830918342112001226102103494435426741373561760199946612965455547118392814389204858321021871505919062366967370907845118464121559886753900829580653195913017174949634850101659327920682778835169460415060177607887785092602593896393234825771018460885175530137990762628739986435339792477919143869600819845028005086837073134537699580113198710606881625449213227965777044569159618080059467520715567940849048784878428075784048591505385207632864227646012093136506294441285115051778230787980794100536688217055491722478845399120313290174205565180798564880453263575864305591991982317190768223088819713678569560965777695766765031114759828882044210076232880703287186456087723032648753799500639301083120803887861774378127519055841200300722021908912663658736721808181905976614769167556777158540579802589251818342338664296892261598721223770948525882958989903498643844474443881365494366186879540743752522865890481258185661398661450145400174586954255798594980349336920287623171809337255391051615774034675800312569439495102693161753597894786106093813129941691167614502128824411906036203613374017421281859950157388018923162152170376719761094107244365793793801295386989614878789768675321459623423508501915602525045883285379171046365189543766620390254725283257987760524763324279709362246110807714160684401619696970071324975880463756403103367758616656042889802269384624618776702823507265083567950830141623483756155429929421201110837966736672631316515189583047632951808141375472573438564897736858285096083841743349704224813424575529979035722907751337333843039501444986132294183971798495102322118655423647575774638095594242360591296505782746376955904417512797972253837869914944669033112417910503764885109559325980725764019767086158860069193141356486082481913726565738118888937728005969856159005365510830407857091418962966413725423368585852851555226887522511422397080984203668781525866100305932014546262080118812816720718824780145563272508294470918608085953183530980510731638727137057868321337393052740572472450248506633407330366175138007347879323263799054516416812819059372532301524603584725802735622225698063481166985270568316890882163465835860871623940600102494748996263020577682569269241310711569600642071296841397219163311355761801485869653232991052823372343529891437871696801221125576878093230993279797781403517189023631723195830422007577725139506420863862974621850284828822685869365480256496976333059074849714862234685521871829072182677767188190862348091724309064749272794249063321076671908863590465544851797913038810912654892930058032156032696351232641701257308317843886563328321861571453054990391255663627593467645412053697784792717742627268539680491908356367887628950374547776804069405173086753558728381846453041208618750501774850530747859885695995496231795325167400822547623776548946062132824935065676526699584643380994341310235323423803547168908178861770343063137755745480312781418782959802518533071507405360815531786468005601078564554813901603820054611268663508697528768889628343605688404297049596482791202545704250698543069950757050521641770316863337335336374097309844944123604755575260516996650125261366737501014283681733536922919507996674711342574996766846101827584358457029128707686343622690042918038244648760087851393131630756512803773427475141968392096310643636596252141934565987883169137323589104391449442898909624179787394451054072973031385263786793430936247939167418114755343777822188531343229598604494060773257053675832346507949828487383790335973180102261516252489745244736999415636378666048565524416324310653091992191500157293663971772706090895913460914745069391507821607407119079643228761455973951456502533178244458604653367072208247136844293637699200643287171063323543071264194456731844289514661786350889430308378000623859334853499710695649927546553930859489538568835127452768087260261620951571152218348568929719647604673202322083355880695310174743610457469825948560363963194178330338717661812773680168893080697111977194694723029058532904402104183070246873285332971231965064831098195313946537722964800874303153979101249774266944684978714490326471233669690510878880297645474564156158989457731952855288748034996749984050907787463093200641078724037937331601107193002062607142334582424540462542816352856677028430889581264765717876678209615246507786765087872876579003133134698338624886416752381893452723012001163113113034922197348228234562972085324530558808215284683475788390241823026060297736587629192442326257690596727099898138760798059017319872806116456671050828020313857962939085308641728493147347650389662707609350511398801922499039899386427952050922079528229736915415528950729894659100857580760402504515924176805312456595928815847212576854617355993371686752308486259055225379546441735683459211531704159539586262195682060312819955077548305878239777757471000557642922054213570564468304657936112737638081857238134537386315694972456099757128283052159658267650533880688019165391968118081281418572817220462275354095675911862857058211998333039295198503759091340411472036588937341537552271364297296808196599896469985420092587035276351185574613124473842321798493624035111419325317850897416455727774208238005295335892784239401954079585688942640101642480065408491600871030419967385671210921727088593422109492170881430916530371486986686971893179090200174110704118528398366526522301044888669286343645609490666154720754657171877519877813139000560447086571004937715998070976628393081479513366020160880383038706268705059769497694751767397008507404890547604186839928221021081130399669544722546602362870171695433294206230069208750619380871523396740933288856122974393873962887381758634584423578738264291004803756667693477749360819940001322660377896176798306587817917609943785269138158184041529402848733581418435970591379579640302235388232907281284199927893644729185255896812857249736740795602912638601051604084121854664026333259636443490047737400712524052142271307557177223718644380878139570493348240315980414040990842347102940869097156488101725379568353259267160845887570740559432298975447149848219162771649962305998564786314810119846095164450874514679765632251834857079057499439224964428029230689670767926868233893624811244604947042834617117937781325965227897322350201659300730107372479967565853987915222243858706826074362840581263173370500381210792807269616977634478284528864656653006242682724878778575478820403482309832337875262464806318641026961704528234584790327235788301279412929095117115574048470611073342621092132524224703194743294571228199637561311515852979620659565423507311318322911676832898668803357039688818470609589490061266012753972229635450284942904935805351259449321417370363952663330002226053999399493976847878006553505003002533676884193556909119395229541876962621299266331597772792862940937809403184874617127502263870006274003996395442342544914195287826641488147525494349583796260659420495576612103430544473916322575699055751049631519785776017501968635137055395586847394685476923560018187033465205842282662951905109025241855539482267976015496469063313573187025125372844144112789403485535788540116915885225539663969928808185475616304765301116517349885884405936331731432533799211895827560075034225205924165278014787237312897593027269541326581114529418241899001721402798568503278671018513545279607071002575123250839676257547507012180306883245517988455725639614671335400322017336633978725979742406809739074434849713367788775483348859367482214591151331249276586343256589118221419004652757799426605306095828358930206405554016138060678689066724033378193562867612701651633762322211931899503103752940992724735568995777465669508965004589174674841147523988346199165253245051342943517043177839997415531126829623625481724245532036772982202357745923377157001238230272487833972522323652446141230855886193819231870646619031765335717267735528420507029371753881025064279991852598942752816765278530756485593015469375198540642186735935640796252013159144435726671556867762786118448141819542800058844475657676470805275223210876130937076711621603388815334555907099900749277080522449657647447293299167735864452743062486723899043202975481149688526255530815693291541173946373125044792210818218274971922456732957266689999701700514112728316579750910292054024386449681639908403523846060297088448251094358934090524965062651966798913985381364764384862824498058997947342392021595105265330929741553926731104482099695044837836713826596572513348637631899862407598711389056234111194498836994171142578124e-4952
+-9.11299882970618650632101483404854954099762703923390835930245121757092922158349434202390177156456801299311836836800882775491746408155508042493377018897452251370955645294482919642306315951408389939155390641495852682235079948388381817147810199988543202753879634595761513692178855612323826464929567053565655516883088865211017019814938434922056584742975703338666052989323453000054190668073008069358409757711401382448879713824803063830292790871907284615732508878463187540078321144646836641714520837263280926298497175995827146959986580625367150614866594146717614105908677560599298664715089392016783619495691054934073204437823890134211440316961661977129365812730934009878180695353988341524099861100850529263372112005494440901109477171905812258529227323637633070888651063754117762127747538812423705094043768193630399481207316041168207344806208594630537211881115413335113285224633734725269999866521248948235216770556291974523156583071033408384307591427651668177754025424246727136381704023361696393955886321614167616227321765765646890482554798209893671519933100185483167698146646061975813150428625627913004683426389119417464100765417965247075255522252188101059573453030353939631794886820407058177721498614643678758463219398856506200197929995488836037979149750875957205550088916491989692772734422102307762690936220523614080121068179030699537459090415147398802270894221813558133238807437473160137690739859560319624048454845519386476365293136990335117454422791419023565330181431828151870734413285105404921525764882299855357984362391524834349015768804575560961368835419493115509531656725852041771629386346595538752239016488852598228738155981970211789883296133871666620120140851882857096332325130619421054262737816186863658938716553696235385578777759657671097856303109826047646030593555743071151634371263116162163842429774756690129571890249249302694618266745032356856859879258097741197841919555437407743854928359534790669719638999794382112720687011634647044361817576684558724625744225713250341137601306821773485014581447146364342163747989066465762520868021905766505225844729872480243797707355400502595509869443020850165379788743173859145576255477727144173012043383739723542744190771201959350703462306885235518328850278815583719203990521860325564139609728125151807551445503270918528255874403111303698792745962171997087050822360314227188891304020453787801409723278140603832271114233523786546117322725291527658718897541208901735407351872443594948184951168691060870978021172967942306361626571077641327297718119321563981345882136259090137713556729892811590283306476205075479147079271094428064841973711602823705646768958871746411377707470132144695674603139062318630558765273113585596550581780101956885083478653298047293578971034172004858991568415867607860110758034102943901257650359209265993172582604368796832550227991875124190404530653699113234281017599675972717228881762872616434186349441235273719869912359540644153586737163021327006174089564189146448642123329760513470710952045089696777693604518869700296629894354067974095792458927056409146163642160925654650608387234540930183193134586363628266252885168941377664242625103384301342516981220052304340851830918342112001226102103494435426741373561760199946612965455547118392814389204858321021871505919062366967370907845118464121559886753900829580653195913017174949634850101659327920682778835169460415060177607887785092602593896393234825771018460885175530137990762628739986435339792477919143869600819845028005086837073134537699580113198710606881625449213227965777044569159618080059467520715567940849048784878428075784048591505385207632864227646012093136506294441285115051778230787980794100536688217055491722478845399120313290174205565180798564880453263575864305591991982317190768223088819713678569560965777695766765031114759828882044210076232880703287186456087723032648753799500639301083120803887861774378127519055841200300722021908912663658736721808181905976614769167556777158540579802589251818342338664296892261598721223770948525882958989903498643844474443881365494366186879540743752522865890481258185661398661450145400174586954255798594980349336920287623171809337255391051615774034675800312569439495102693161753597894786106093813129941691167614502128824411906036203613374017421281859950157388018923162152170376719761094107244365793793801295386989614878789768675321459623423508501915602525045883285379171046365189543766620390254725283257987760524763324279709362246110807714160684401619696970071324975880463756403103367758616656042889802269384624618776702823507265083567950830141623483756155429929421201110837966736672631316515189583047632951808141375472573438564897736858285096083841743349704224813424575529979035722907751337333843039501444986132294183971798495102322118655423647575774638095594242360591296505782746376955904417512797972253837869914944669033112417910503764885109559325980725764019767086158860069193141356486082481913726565738118888937728005969856159005365510830407857091418962966413725423368585852851555226887522511422397080984203668781525866100305932014546262080118812816720718824780145563272508294470918608085953183530980510731638727137057868321337393052740572472450248506633407330366175138007347879323263799054516416812819059372532301524603584725802735622225698063481166985270568316890882163465835860871623940600102494748996263020577682569269241310711569600642071296841397219163311355761801485869653232991052823372343529891437871696801221125576878093230993279797781403517189023631723195830422007577725139506420863862974621850284828822685869365480256496976333059074849714862234685521871829072182677767188190862348091724309064749272794249063321076671908863590465544851797913038810912654892930058032156032696351232641701257308317843886563328321861571453054990391255663627593467645412053697784792717742627268539680491908356367887628950374547776804069405173086753558728381846453041208618750501774850530747859885695995496231795325167400822547623776548946062132824935065676526699584643380994341310235323423803547168908178861770343063137755745480312781418782959802518533071507405360815531786468005601078564554813901603820054611268663508697528768889628343605688404297049596482791202545704250698543069950757050521641770316863337335336374097309844944123604755575260516996650125261366737501014283681733536922919507996674711342574996766846101827584358457029128707686343622690042918038244648760087851393131630756512803773427475141968392096310643636596252141934565987883169137323589104391449442898909624179787394451054072973031385263786793430936247939167418114755343777822188531343229598604494060773257053675832346507949828487383790335973180102261516252489745244736999415636378666048565524416324310653091992191500157293663971772706090895913460914745069391507821607407119079643228761455973951456502533178244458604653367072208247136844293637699200643287171063323543071264194456731844289514661786350889430308378000623859334853499710695649927546553930859489538568835127452768087260261620951571152218348568929719647604673202322083355880695310174743610457469825948560363963194178330338717661812773680168893080697111977194694723029058532904402104183070246873285332971231965064831098195313946537722964800874303153979101249774266944684978714490326471233669690510878880297645474564156158989457731952855288748034996749984050907787463093200641078724037937331601107193002062607142334582424540462542816352856677028430889581264765717876678209615246507786765087872876579003133134698338624886416752381893452723012001163113113034922197348228234562972085324530558808215284683475788390241823026060297736587629192442326257690596727099898138760798059017319872806116456671050828020313857962939085308641728493147347650389662707609350511398801922499039899386427952050922079528229736915415528950729894659100857580760402504515924176805312456595928815847212576854617355993371686752308486259055225379546441735683459211531704159539586262195682060312819955077548305878239777757471000557642922054213570564468304657936112737638081857238134537386315694972456099757128283052159658267650533880688019165391968118081281418572817220462275354095675911862857058211998333039295198503759091340411472036588937341537552271364297296808196599896469985420092587035276351185574613124473842321798493624035111419325317850897416455727774208238005295335892784239401954079585688942640101642480065408491600871030419967385671210921727088593422109492170881430916530371486986686971893179090200174110704118528398366526522301044888669286343645609490666154720754657171877519877813139000560447086571004937715998070976628393081479513366020160880383038706268705059769497694751767397008507404890547604186839928221021081130399669544722546602362870171695433294206230069208750619380871523396740933288856122974393873962887381758634584423578738264291004803756667693477749360819940001322660377896176798306587817917609943785269138158184041529402848733581418435970591379579640302235388232907281284199927893644729185255896812857249736740795602912638601051604084121854664026333259636443490047737400712524052142271307557177223718644380878139570493348240315980414040990842347102940869097156488101725379568353259267160845887570740559432298975447149848219162771649962305998564786314810119846095164450874514679765632251834857079057499439224964428029230689670767926868233893624811244604947042834617117937781325965227897322350201659300730107372479967565853987915222243858706826074362840581263173370500381210792807269616977634478284528864656653006242682724878778575478820403482309832337875262464806318641026961704528234584790327235788301279412929095117115574048470611073342621092132524224703194743294571228199637561311515852979620659565423507311318322911676832898668803357039688818470609589490061266012753972229635450284942904935805351259449321417370363952663330002226053999399493976847878006553505003002533676884193556909119395229541876962621299266331597772792862940937809403184874617127502263870006274003996395442342544914195287826641488147525494349583796260659420495576612103430544473916322575699055751049631519785776017501968635137055395586847394685476923560018187033465205842282662951905109025241855539482267976015496469063313573187025125372844144112789403485535788540116915885225539663969928808185475616304765301116517349885884405936331731432533799211895827560075034225205924165278014787237312897593027269541326581114529418241899001721402798568503278671018513545279607071002575123250839676257547507012180306883245517988455725639614671335400322017336633978725979742406809739074434849713367788775483348859367482214591151331249276586343256589118221419004652757799426605306095828358930206405554016138060678689066724033378193562867612701651633762322211931899503103752940992724735568995777465669508965004589174674841147523988346199165253245051342943517043177839997415531126829623625481724245532036772982202357745923377157001238230272487833972522323652446141230855886193819231870646619031765335717267735528420507029371753881025064279991852598942752816765278530756485593015469375198540642186735935640796252013159144435726671556867762786118448141819542800058844475657676470805275223210876130937076711621603388815334555907099900749277080522449657647447293299167735864452743062486723899043202975481149688526255530815693291541173946373125044792210818218274971922456732957266689999701700514112728316579750910292054024386449681639908403523846060297088448251094358934090524965062651966798913985381364764384862824498058997947342392021595105265330929741553926731104482099695044837836713826596572513348637631899862407598711389056234111194498836994171142578125e-4952
+-9.11299882970618650632101483404854954099762703923390835930245121757092922158349434202390177156456801299311836836800882775491746408155508042493377018897452251370955645294482919642306315951408389939155390641495852682235079948388381817147810199988543202753879634595761513692178855612323826464929567053565655516883088865211017019814938434922056584742975703338666052989323453000054190668073008069358409757711401382448879713824803063830292790871907284615732508878463187540078321144646836641714520837263280926298497175995827146959986580625367150614866594146717614105908677560599298664715089392016783619495691054934073204437823890134211440316961661977129365812730934009878180695353988341524099861100850529263372112005494440901109477171905812258529227323637633070888651063754117762127747538812423705094043768193630399481207316041168207344806208594630537211881115413335113285224633734725269999866521248948235216770556291974523156583071033408384307591427651668177754025424246727136381704023361696393955886321614167616227321765765646890482554798209893671519933100185483167698146646061975813150428625627913004683426389119417464100765417965247075255522252188101059573453030353939631794886820407058177721498614643678758463219398856506200197929995488836037979149750875957205550088916491989692772734422102307762690936220523614080121068179030699537459090415147398802270894221813558133238807437473160137690739859560319624048454845519386476365293136990335117454422791419023565330181431828151870734413285105404921525764882299855357984362391524834349015768804575560961368835419493115509531656725852041771629386346595538752239016488852598228738155981970211789883296133871666620120140851882857096332325130619421054262737816186863658938716553696235385578777759657671097856303109826047646030593555743071151634371263116162163842429774756690129571890249249302694618266745032356856859879258097741197841919555437407743854928359534790669719638999794382112720687011634647044361817576684558724625744225713250341137601306821773485014581447146364342163747989066465762520868021905766505225844729872480243797707355400502595509869443020850165379788743173859145576255477727144173012043383739723542744190771201959350703462306885235518328850278815583719203990521860325564139609728125151807551445503270918528255874403111303698792745962171997087050822360314227188891304020453787801409723278140603832271114233523786546117322725291527658718897541208901735407351872443594948184951168691060870978021172967942306361626571077641327297718119321563981345882136259090137713556729892811590283306476205075479147079271094428064841973711602823705646768958871746411377707470132144695674603139062318630558765273113585596550581780101956885083478653298047293578971034172004858991568415867607860110758034102943901257650359209265993172582604368796832550227991875124190404530653699113234281017599675972717228881762872616434186349441235273719869912359540644153586737163021327006174089564189146448642123329760513470710952045089696777693604518869700296629894354067974095792458927056409146163642160925654650608387234540930183193134586363628266252885168941377664242625103384301342516981220052304340851830918342112001226102103494435426741373561760199946612965455547118392814389204858321021871505919062366967370907845118464121559886753900829580653195913017174949634850101659327920682778835169460415060177607887785092602593896393234825771018460885175530137990762628739986435339792477919143869600819845028005086837073134537699580113198710606881625449213227965777044569159618080059467520715567940849048784878428075784048591505385207632864227646012093136506294441285115051778230787980794100536688217055491722478845399120313290174205565180798564880453263575864305591991982317190768223088819713678569560965777695766765031114759828882044210076232880703287186456087723032648753799500639301083120803887861774378127519055841200300722021908912663658736721808181905976614769167556777158540579802589251818342338664296892261598721223770948525882958989903498643844474443881365494366186879540743752522865890481258185661398661450145400174586954255798594980349336920287623171809337255391051615774034675800312569439495102693161753597894786106093813129941691167614502128824411906036203613374017421281859950157388018923162152170376719761094107244365793793801295386989614878789768675321459623423508501915602525045883285379171046365189543766620390254725283257987760524763324279709362246110807714160684401619696970071324975880463756403103367758616656042889802269384624618776702823507265083567950830141623483756155429929421201110837966736672631316515189583047632951808141375472573438564897736858285096083841743349704224813424575529979035722907751337333843039501444986132294183971798495102322118655423647575774638095594242360591296505782746376955904417512797972253837869914944669033112417910503764885109559325980725764019767086158860069193141356486082481913726565738118888937728005969856159005365510830407857091418962966413725423368585852851555226887522511422397080984203668781525866100305932014546262080118812816720718824780145563272508294470918608085953183530980510731638727137057868321337393052740572472450248506633407330366175138007347879323263799054516416812819059372532301524603584725802735622225698063481166985270568316890882163465835860871623940600102494748996263020577682569269241310711569600642071296841397219163311355761801485869653232991052823372343529891437871696801221125576878093230993279797781403517189023631723195830422007577725139506420863862974621850284828822685869365480256496976333059074849714862234685521871829072182677767188190862348091724309064749272794249063321076671908863590465544851797913038810912654892930058032156032696351232641701257308317843886563328321861571453054990391255663627593467645412053697784792717742627268539680491908356367887628950374547776804069405173086753558728381846453041208618750501774850530747859885695995496231795325167400822547623776548946062132824935065676526699584643380994341310235323423803547168908178861770343063137755745480312781418782959802518533071507405360815531786468005601078564554813901603820054611268663508697528768889628343605688404297049596482791202545704250698543069950757050521641770316863337335336374097309844944123604755575260516996650125261366737501014283681733536922919507996674711342574996766846101827584358457029128707686343622690042918038244648760087851393131630756512803773427475141968392096310643636596252141934565987883169137323589104391449442898909624179787394451054072973031385263786793430936247939167418114755343777822188531343229598604494060773257053675832346507949828487383790335973180102261516252489745244736999415636378666048565524416324310653091992191500157293663971772706090895913460914745069391507821607407119079643228761455973951456502533178244458604653367072208247136844293637699200643287171063323543071264194456731844289514661786350889430308378000623859334853499710695649927546553930859489538568835127452768087260261620951571152218348568929719647604673202322083355880695310174743610457469825948560363963194178330338717661812773680168893080697111977194694723029058532904402104183070246873285332971231965064831098195313946537722964800874303153979101249774266944684978714490326471233669690510878880297645474564156158989457731952855288748034996749984050907787463093200641078724037937331601107193002062607142334582424540462542816352856677028430889581264765717876678209615246507786765087872876579003133134698338624886416752381893452723012001163113113034922197348228234562972085324530558808215284683475788390241823026060297736587629192442326257690596727099898138760798059017319872806116456671050828020313857962939085308641728493147347650389662707609350511398801922499039899386427952050922079528229736915415528950729894659100857580760402504515924176805312456595928815847212576854617355993371686752308486259055225379546441735683459211531704159539586262195682060312819955077548305878239777757471000557642922054213570564468304657936112737638081857238134537386315694972456099757128283052159658267650533880688019165391968118081281418572817220462275354095675911862857058211998333039295198503759091340411472036588937341537552271364297296808196599896469985420092587035276351185574613124473842321798493624035111419325317850897416455727774208238005295335892784239401954079585688942640101642480065408491600871030419967385671210921727088593422109492170881430916530371486986686971893179090200174110704118528398366526522301044888669286343645609490666154720754657171877519877813139000560447086571004937715998070976628393081479513366020160880383038706268705059769497694751767397008507404890547604186839928221021081130399669544722546602362870171695433294206230069208750619380871523396740933288856122974393873962887381758634584423578738264291004803756667693477749360819940001322660377896176798306587817917609943785269138158184041529402848733581418435970591379579640302235388232907281284199927893644729185255896812857249736740795602912638601051604084121854664026333259636443490047737400712524052142271307557177223718644380878139570493348240315980414040990842347102940869097156488101725379568353259267160845887570740559432298975447149848219162771649962305998564786314810119846095164450874514679765632251834857079057499439224964428029230689670767926868233893624811244604947042834617117937781325965227897322350201659300730107372479967565853987915222243858706826074362840581263173370500381210792807269616977634478284528864656653006242682724878778575478820403482309832337875262464806318641026961704528234584790327235788301279412929095117115574048470611073342621092132524224703194743294571228199637561311515852979620659565423507311318322911676832898668803357039688818470609589490061266012753972229635450284942904935805351259449321417370363952663330002226053999399493976847878006553505003002533676884193556909119395229541876962621299266331597772792862940937809403184874617127502263870006274003996395442342544914195287826641488147525494349583796260659420495576612103430544473916322575699055751049631519785776017501968635137055395586847394685476923560018187033465205842282662951905109025241855539482267976015496469063313573187025125372844144112789403485535788540116915885225539663969928808185475616304765301116517349885884405936331731432533799211895827560075034225205924165278014787237312897593027269541326581114529418241899001721402798568503278671018513545279607071002575123250839676257547507012180306883245517988455725639614671335400322017336633978725979742406809739074434849713367788775483348859367482214591151331249276586343256589118221419004652757799426605306095828358930206405554016138060678689066724033378193562867612701651633762322211931899503103752940992724735568995777465669508965004589174674841147523988346199165253245051342943517043177839997415531126829623625481724245532036772982202357745923377157001238230272487833972522323652446141230855886193819231870646619031765335717267735528420507029371753881025064279991852598942752816765278530756485593015469375198540642186735935640796252013159144435726671556867762786118448141819542800058844475657676470805275223210876130937076711621603388815334555907099900749277080522449657647447293299167735864452743062486723899043202975481149688526255530815693291541173946373125044792210818218274971922456732957266689999701700514112728316579750910292054024386449681639908403523846060297088448251094358934090524965062651966798913985381364764384862824498058997947342392021595105265330929741553926731104482099695044837836713826596572513348637631899862407598711389056234111194498836994171142578126e-4952
+3.237587559719012555462219479113823276249784669017340504844942194598519770062059685508835745638324970127939070738424059838293609943191271023342555035986308991521396355375667467208367312819235870119724263252776995195727778126085574034035411017344128491238136414394551514178668780674015531193282296319913113495953953933831631032855605791532328598034154166422617226534880263244723830482289656875701701315902175019974435037627824356684033058939701577883356651733717468531204705842607568803666569711421917525834491783583598401321476176752039857173551930268891446850107760584333855521475305010940756813993214730850216669600967698749412592167692757446422169965426483919224341062751152057061076522973232731542382055087239368522167656194830741819605276971705738272393130698937532095725613383807312946395184980707534803490003540251394324459987958400939111001126190861523615485938285497714410609640798273816511769391568591823198476415765275534341709798367687043373145262933998108452661682659942586304978413812755518166239176614473815940025342279575304159493260770068030636885746695206392378276051948759263882079389379666940357441139816661913198656187703463519723262653223919257185751827493927586153153792077729913353547954808876263400200663495414360816863385220457719546338953323399286762099558324132103460225580066817535680886906060858264089074120360391613368274811868067637495154569071591624185979937989402513750464346904036668477876379544221432800037599944499161940321774835027752710681217554286366043661491013593886229615614494736186475932160549630939390542165126494166960681499481651861215529870984381726203476917507560266886692644952355421814201350137351435237036912624414444992497142303802423605897110605364956579914507108584002230524766331348271456591814078599780820974961968314684496428310691542272663818486132771177670874927831510002443658417608078383611526899905533629456904234997116303929427262032216072887961072267850618234492852606488522739744757845004694461812790342894353802938671928834585447328398711684245164703625580196678024410303542544534512706792134908369873605619756775207191558754413381571756431003248529020572648048946458999967788526617126349345966896362376841092268841417781414969315002419192181972121568811432459128737128140063645558482525300089060238860392371092102688097987915838860882370022268312322882235690785726190915062699382576041643741555139697348927957856990969985342299599797431503615312038393069808777315725367497595040966093808407117316369389112216628231869173217637452855462790553030636920487796465880633399632793882734473382168542596184679158149228725004404714293460752371865436947855237307240001863573081174929166645758276081272685156100195420794154740486637315823136798695124738873328565945598241199335059398955049459449844741098478330319112865980346771381982151154499846478545530650091824164892591396650703633600023191521502618379988693800703884555191647864959327260468892793195316578510173816406054364319294906641284764788384683586662382042642852654156477478700779123584369965723284711409361741235548687181052639639279285373139084165798451899763979500837428077782309910703522399860010310321116623028924118238023770381424894162717815296210097245221769714495449744327945091943394325259297771090128969600269822520904193880119094781214175887316220311309028456568749910010962366586834018403242866721783519806933018588077977626913774236680220258524711348037750591646286531625306510583751929280541119187219596706615736304036444366663256426643903386694536649648686380122198677895751002327229059364018755164517060321515091173358005987498359799467138817648881479418623694683454881683746841149715181334498096967702613110590140231345676956141227850879905018558219984441819798054463206764413100251255775535830770535620946159535406497134759043192647996190512978586496199656070707105117773853504277795024754647024165589129442822627147868917463795166386552921913398878270019905147510849518894114102536073369047160130990411626048426437835295683097278297774735181045158616674564080237813146623269215019613231938626758927531490945029356207933289363847181438902539297057969524961348607844569521442237914899100699610921669921572167164875488132527187949318543809703388178931170799769792886086681284964861608656928109305369539955846964197786677053847603962194721523867993048528558551380823699291873352033111096244814245789620930756114228971363838828108534030152031715929722499546436547773404017947035596936338462103946797525667033935433489292620531649199724400832489751788129365426568881328357966337292439204382537174357675404105580244018783685041224798457022189315692175787257287203633134300759209060570319508886475377719911176071302732819878165468592717406388218727585026352127436844762994722826390779737322113768842482160812973100323673863050234437722898796145596181862320550301285861980052194863780743808106946940079349630782676930197134206259739125377941060751175427888774493677478593805682322173891730311959284895178856039354015035864931073602059531001572891528828982167810245343327388887928886208615327002834690068636094325052251429781641267821367266715283643659749152264457938319185148303604827363623405060374573505789923003843438436174489383805098509083722050766328250349793203837202162624690093533478114438810603140565070517669964629947543608404988178019652088162307525611931821066493746994641048066011859814337589829896549720562117090677291541318153057715167624128318297771376531788973088699647168159229805877415594828532539839967464064556647594705830374653113373530876658380240145380423210673778776803592627231257495817394581607796277282644312510714532297108722017217547317744900647318022108570947064304280100418971450552007356891519523293614416944016354756866350050833501416942505071203810116719053430543531027953437436446745566839242129860410443198862219469972163224971258348314341755015213118628882713134766297624091644805801186976152536913514712919240503721680740586016832099946807466311777189050656676962849581383790904722087478646766320517056183581970236248227413322748304134245717987665377396011236706627320817654565682680006957454759981618023476448544673508068369492066566895437050571584345511070959483898938738225050292533674383091612495407126805381796487365892131916426837522671623266627483065655765705534239355214893395905702329340402794052884259146049064629582075576563307670749189662176976725361937046200576007893814439695301892528761187544161389682003509216791271836545495416676148151145195082668323677621182991451835324281863619641773620601014510950996746726615703771971266687151564427772359427340566909351858654807999781808513034680104078196607462166928018863385629928965649243954503391493597963417955268639606791452833692467872935741940362479842688642227725662504694679557678170929873774151037857807219938356152056997839625453727441947651198316190826615266016347740875615970031428012228328190610356706715662722241878767131224669837573607121539572299329404101274463156060298348931678277361174057097484704587036227686110677413094941011961262438027467952964727129462752693949019764164538344775554466171428121848999818969114034332797672927989107710137279281184295118233855942385256333164153378143279674287318136458207166174996112638689535976047617221520910027427485161965702038805161865494457444594178063766957037428053543239915792369877811053417485684498667123216132006378630814477106813088898563644909178779463295955587688067277368683836470612208483299572260344016516194247232298740800342116589984844356688576984553507410293250093945014209879983314562948451929862241009275783684229669718641013736581856815277185073259140534024850924787544871716174654424640728091372513505922826813145390369149590652886241000625495880523771672395227312971578042522330551788256261683080675549820375567692574152956993944504349004617185470945673049153218968830613586193253490318451871770642617802890083608004460414305421033261048294750210470303202846332054952531617433058538758154347087854561609738141615145103748777579733574989673510104836750248325511777237502526995647687215364262385606217553691332159421351598905950537513518351520709657614578131639854432532002236696200855408766520105076378983345708235918180749273124590433024519869147132931932462703067876214268579940066030521414045386366551780718510535469417760242493782392451178913322503092692423649855756521279456558275339921490892868856862895022564047205838132429286600764536839036698193759634186899291274131934296059833048690594627623595320676097721540716472990950611858372856271872423573251506230042608074167903809812264198034505185435990821356377966484742250577592243727298923187891299404854048446822719928239317254073429532989089675503790372464487057264894107613242300912487070053676379388189496900004239731820229886894053019610823763957809819187948639826973433528683168917360632750040517847686479093538683816924213175672979768822065627696943474914020483056384006872835738311110986586149510661361915342172527409078742250880056867149831149121019729847242037335904440063130981999650700416787683293610119590221942974317455716336227454789239793488032299063316588917505912406020220045264868457718282165158892171630470709599503997282778168097827497383884195820921583645621293941200045604062174334998171535030513366277293714389988219756129580868518167923841173364269774889246694435264051484911461988227011238661037602452710188911900438270362280391121270021679247152879324195035694278071477495720447513017171148877312193736366348711630105507365864598069586257026976295714123943691621672377694552248018987680338612382795605985191106112971398796002636340393693119651973344711646854574482999700397952536878348512983782198330513744803168936076427075943787200489575435147989033386529956551570669047103070223076797892329848058499725632813524581372640746415923016932853954152472487866287318545051065376430120748079948860283261855738836955246188128622509828635867225708782966017423170535046509131388753895013061151387840089512861842615441729962315731301087767989000918136617870582141517330935619268642915983553727587587676791953536960714236687847602589538927962585440961131240218794236944630211930970546118745080346860636620310193382167597465544174488399379683716417891139157575146359165023126594124268610800205258776019000550873739401445303129974560221438061891795442780328126230093178952504570380957199592993338719686487798275474853570100033092481743129836527369756194343789131822069107283156271772679863538216891518713732520976834628418347371261368933454629405371869789752684339805368137450825001203521193642598238954329102258317328098581116978343883611320940814793654745807336162557057195523274610323601685712314930799144191673243832283659669368716126815118360353441303009936083544193524336572930768154506567477565558211143508568396203781879592033787429012753106951129653074630840496376302289668286168325299592504054003803917262600195834001336180158836765599057537979745423711070158871650976475924365707758401328959478791343481250979029363644046972556422294698558561670817595994409985323205913035009923360820734795546082012200697671744573982535291905800552837118327702125018691644774560916230166739307705017656065679867259837178918123254219579594535869171376148397610005870749992910355727569593729567789260479930835305112462727870603529547312621720559953074675620549217314861961905983960910846471569192459257648138212674016814845327496495507412976753381357634960529826817906824433858135485518651632270319927880227571858035210375443324098235463619647723862420557582355632137583370066602155641218235815280874570372436217877316899649287051943247206509113311767578124e-4966
+3.237587559719012555462219479113823276249784669017340504844942194598519770062059685508835745638324970127939070738424059838293609943191271023342555035986308991521396355375667467208367312819235870119724263252776995195727778126085574034035411017344128491238136414394551514178668780674015531193282296319913113495953953933831631032855605791532328598034154166422617226534880263244723830482289656875701701315902175019974435037627824356684033058939701577883356651733717468531204705842607568803666569711421917525834491783583598401321476176752039857173551930268891446850107760584333855521475305010940756813993214730850216669600967698749412592167692757446422169965426483919224341062751152057061076522973232731542382055087239368522167656194830741819605276971705738272393130698937532095725613383807312946395184980707534803490003540251394324459987958400939111001126190861523615485938285497714410609640798273816511769391568591823198476415765275534341709798367687043373145262933998108452661682659942586304978413812755518166239176614473815940025342279575304159493260770068030636885746695206392378276051948759263882079389379666940357441139816661913198656187703463519723262653223919257185751827493927586153153792077729913353547954808876263400200663495414360816863385220457719546338953323399286762099558324132103460225580066817535680886906060858264089074120360391613368274811868067637495154569071591624185979937989402513750464346904036668477876379544221432800037599944499161940321774835027752710681217554286366043661491013593886229615614494736186475932160549630939390542165126494166960681499481651861215529870984381726203476917507560266886692644952355421814201350137351435237036912624414444992497142303802423605897110605364956579914507108584002230524766331348271456591814078599780820974961968314684496428310691542272663818486132771177670874927831510002443658417608078383611526899905533629456904234997116303929427262032216072887961072267850618234492852606488522739744757845004694461812790342894353802938671928834585447328398711684245164703625580196678024410303542544534512706792134908369873605619756775207191558754413381571756431003248529020572648048946458999967788526617126349345966896362376841092268841417781414969315002419192181972121568811432459128737128140063645558482525300089060238860392371092102688097987915838860882370022268312322882235690785726190915062699382576041643741555139697348927957856990969985342299599797431503615312038393069808777315725367497595040966093808407117316369389112216628231869173217637452855462790553030636920487796465880633399632793882734473382168542596184679158149228725004404714293460752371865436947855237307240001863573081174929166645758276081272685156100195420794154740486637315823136798695124738873328565945598241199335059398955049459449844741098478330319112865980346771381982151154499846478545530650091824164892591396650703633600023191521502618379988693800703884555191647864959327260468892793195316578510173816406054364319294906641284764788384683586662382042642852654156477478700779123584369965723284711409361741235548687181052639639279285373139084165798451899763979500837428077782309910703522399860010310321116623028924118238023770381424894162717815296210097245221769714495449744327945091943394325259297771090128969600269822520904193880119094781214175887316220311309028456568749910010962366586834018403242866721783519806933018588077977626913774236680220258524711348037750591646286531625306510583751929280541119187219596706615736304036444366663256426643903386694536649648686380122198677895751002327229059364018755164517060321515091173358005987498359799467138817648881479418623694683454881683746841149715181334498096967702613110590140231345676956141227850879905018558219984441819798054463206764413100251255775535830770535620946159535406497134759043192647996190512978586496199656070707105117773853504277795024754647024165589129442822627147868917463795166386552921913398878270019905147510849518894114102536073369047160130990411626048426437835295683097278297774735181045158616674564080237813146623269215019613231938626758927531490945029356207933289363847181438902539297057969524961348607844569521442237914899100699610921669921572167164875488132527187949318543809703388178931170799769792886086681284964861608656928109305369539955846964197786677053847603962194721523867993048528558551380823699291873352033111096244814245789620930756114228971363838828108534030152031715929722499546436547773404017947035596936338462103946797525667033935433489292620531649199724400832489751788129365426568881328357966337292439204382537174357675404105580244018783685041224798457022189315692175787257287203633134300759209060570319508886475377719911176071302732819878165468592717406388218727585026352127436844762994722826390779737322113768842482160812973100323673863050234437722898796145596181862320550301285861980052194863780743808106946940079349630782676930197134206259739125377941060751175427888774493677478593805682322173891730311959284895178856039354015035864931073602059531001572891528828982167810245343327388887928886208615327002834690068636094325052251429781641267821367266715283643659749152264457938319185148303604827363623405060374573505789923003843438436174489383805098509083722050766328250349793203837202162624690093533478114438810603140565070517669964629947543608404988178019652088162307525611931821066493746994641048066011859814337589829896549720562117090677291541318153057715167624128318297771376531788973088699647168159229805877415594828532539839967464064556647594705830374653113373530876658380240145380423210673778776803592627231257495817394581607796277282644312510714532297108722017217547317744900647318022108570947064304280100418971450552007356891519523293614416944016354756866350050833501416942505071203810116719053430543531027953437436446745566839242129860410443198862219469972163224971258348314341755015213118628882713134766297624091644805801186976152536913514712919240503721680740586016832099946807466311777189050656676962849581383790904722087478646766320517056183581970236248227413322748304134245717987665377396011236706627320817654565682680006957454759981618023476448544673508068369492066566895437050571584345511070959483898938738225050292533674383091612495407126805381796487365892131916426837522671623266627483065655765705534239355214893395905702329340402794052884259146049064629582075576563307670749189662176976725361937046200576007893814439695301892528761187544161389682003509216791271836545495416676148151145195082668323677621182991451835324281863619641773620601014510950996746726615703771971266687151564427772359427340566909351858654807999781808513034680104078196607462166928018863385629928965649243954503391493597963417955268639606791452833692467872935741940362479842688642227725662504694679557678170929873774151037857807219938356152056997839625453727441947651198316190826615266016347740875615970031428012228328190610356706715662722241878767131224669837573607121539572299329404101274463156060298348931678277361174057097484704587036227686110677413094941011961262438027467952964727129462752693949019764164538344775554466171428121848999818969114034332797672927989107710137279281184295118233855942385256333164153378143279674287318136458207166174996112638689535976047617221520910027427485161965702038805161865494457444594178063766957037428053543239915792369877811053417485684498667123216132006378630814477106813088898563644909178779463295955587688067277368683836470612208483299572260344016516194247232298740800342116589984844356688576984553507410293250093945014209879983314562948451929862241009275783684229669718641013736581856815277185073259140534024850924787544871716174654424640728091372513505922826813145390369149590652886241000625495880523771672395227312971578042522330551788256261683080675549820375567692574152956993944504349004617185470945673049153218968830613586193253490318451871770642617802890083608004460414305421033261048294750210470303202846332054952531617433058538758154347087854561609738141615145103748777579733574989673510104836750248325511777237502526995647687215364262385606217553691332159421351598905950537513518351520709657614578131639854432532002236696200855408766520105076378983345708235918180749273124590433024519869147132931932462703067876214268579940066030521414045386366551780718510535469417760242493782392451178913322503092692423649855756521279456558275339921490892868856862895022564047205838132429286600764536839036698193759634186899291274131934296059833048690594627623595320676097721540716472990950611858372856271872423573251506230042608074167903809812264198034505185435990821356377966484742250577592243727298923187891299404854048446822719928239317254073429532989089675503790372464487057264894107613242300912487070053676379388189496900004239731820229886894053019610823763957809819187948639826973433528683168917360632750040517847686479093538683816924213175672979768822065627696943474914020483056384006872835738311110986586149510661361915342172527409078742250880056867149831149121019729847242037335904440063130981999650700416787683293610119590221942974317455716336227454789239793488032299063316588917505912406020220045264868457718282165158892171630470709599503997282778168097827497383884195820921583645621293941200045604062174334998171535030513366277293714389988219756129580868518167923841173364269774889246694435264051484911461988227011238661037602452710188911900438270362280391121270021679247152879324195035694278071477495720447513017171148877312193736366348711630105507365864598069586257026976295714123943691621672377694552248018987680338612382795605985191106112971398796002636340393693119651973344711646854574482999700397952536878348512983782198330513744803168936076427075943787200489575435147989033386529956551570669047103070223076797892329848058499725632813524581372640746415923016932853954152472487866287318545051065376430120748079948860283261855738836955246188128622509828635867225708782966017423170535046509131388753895013061151387840089512861842615441729962315731301087767989000918136617870582141517330935619268642915983553727587587676791953536960714236687847602589538927962585440961131240218794236944630211930970546118745080346860636620310193382167597465544174488399379683716417891139157575146359165023126594124268610800205258776019000550873739401445303129974560221438061891795442780328126230093178952504570380957199592993338719686487798275474853570100033092481743129836527369756194343789131822069107283156271772679863538216891518713732520976834628418347371261368933454629405371869789752684339805368137450825001203521193642598238954329102258317328098581116978343883611320940814793654745807336162557057195523274610323601685712314930799144191673243832283659669368716126815118360353441303009936083544193524336572930768154506567477565558211143508568396203781879592033787429012753106951129653074630840496376302289668286168325299592504054003803917262600195834001336180158836765599057537979745423711070158871650976475924365707758401328959478791343481250979029363644046972556422294698558561670817595994409985323205913035009923360820734795546082012200697671744573982535291905800552837118327702125018691644774560916230166739307705017656065679867259837178918123254219579594535869171376148397610005870749992910355727569593729567789260479930835305112462727870603529547312621720559953074675620549217314861961905983960910846471569192459257648138212674016814845327496495507412976753381357634960529826817906824433858135485518651632270319927880227571858035210375443324098235463619647723862420557582355632137583370066602155641218235815280874570372436217877316899649287051943247206509113311767578125e-4966
+3.237587559719012555462219479113823276249784669017340504844942194598519770062059685508835745638324970127939070738424059838293609943191271023342555035986308991521396355375667467208367312819235870119724263252776995195727778126085574034035411017344128491238136414394551514178668780674015531193282296319913113495953953933831631032855605791532328598034154166422617226534880263244723830482289656875701701315902175019974435037627824356684033058939701577883356651733717468531204705842607568803666569711421917525834491783583598401321476176752039857173551930268891446850107760584333855521475305010940756813993214730850216669600967698749412592167692757446422169965426483919224341062751152057061076522973232731542382055087239368522167656194830741819605276971705738272393130698937532095725613383807312946395184980707534803490003540251394324459987958400939111001126190861523615485938285497714410609640798273816511769391568591823198476415765275534341709798367687043373145262933998108452661682659942586304978413812755518166239176614473815940025342279575304159493260770068030636885746695206392378276051948759263882079389379666940357441139816661913198656187703463519723262653223919257185751827493927586153153792077729913353547954808876263400200663495414360816863385220457719546338953323399286762099558324132103460225580066817535680886906060858264089074120360391613368274811868067637495154569071591624185979937989402513750464346904036668477876379544221432800037599944499161940321774835027752710681217554286366043661491013593886229615614494736186475932160549630939390542165126494166960681499481651861215529870984381726203476917507560266886692644952355421814201350137351435237036912624414444992497142303802423605897110605364956579914507108584002230524766331348271456591814078599780820974961968314684496428310691542272663818486132771177670874927831510002443658417608078383611526899905533629456904234997116303929427262032216072887961072267850618234492852606488522739744757845004694461812790342894353802938671928834585447328398711684245164703625580196678024410303542544534512706792134908369873605619756775207191558754413381571756431003248529020572648048946458999967788526617126349345966896362376841092268841417781414969315002419192181972121568811432459128737128140063645558482525300089060238860392371092102688097987915838860882370022268312322882235690785726190915062699382576041643741555139697348927957856990969985342299599797431503615312038393069808777315725367497595040966093808407117316369389112216628231869173217637452855462790553030636920487796465880633399632793882734473382168542596184679158149228725004404714293460752371865436947855237307240001863573081174929166645758276081272685156100195420794154740486637315823136798695124738873328565945598241199335059398955049459449844741098478330319112865980346771381982151154499846478545530650091824164892591396650703633600023191521502618379988693800703884555191647864959327260468892793195316578510173816406054364319294906641284764788384683586662382042642852654156477478700779123584369965723284711409361741235548687181052639639279285373139084165798451899763979500837428077782309910703522399860010310321116623028924118238023770381424894162717815296210097245221769714495449744327945091943394325259297771090128969600269822520904193880119094781214175887316220311309028456568749910010962366586834018403242866721783519806933018588077977626913774236680220258524711348037750591646286531625306510583751929280541119187219596706615736304036444366663256426643903386694536649648686380122198677895751002327229059364018755164517060321515091173358005987498359799467138817648881479418623694683454881683746841149715181334498096967702613110590140231345676956141227850879905018558219984441819798054463206764413100251255775535830770535620946159535406497134759043192647996190512978586496199656070707105117773853504277795024754647024165589129442822627147868917463795166386552921913398878270019905147510849518894114102536073369047160130990411626048426437835295683097278297774735181045158616674564080237813146623269215019613231938626758927531490945029356207933289363847181438902539297057969524961348607844569521442237914899100699610921669921572167164875488132527187949318543809703388178931170799769792886086681284964861608656928109305369539955846964197786677053847603962194721523867993048528558551380823699291873352033111096244814245789620930756114228971363838828108534030152031715929722499546436547773404017947035596936338462103946797525667033935433489292620531649199724400832489751788129365426568881328357966337292439204382537174357675404105580244018783685041224798457022189315692175787257287203633134300759209060570319508886475377719911176071302732819878165468592717406388218727585026352127436844762994722826390779737322113768842482160812973100323673863050234437722898796145596181862320550301285861980052194863780743808106946940079349630782676930197134206259739125377941060751175427888774493677478593805682322173891730311959284895178856039354015035864931073602059531001572891528828982167810245343327388887928886208615327002834690068636094325052251429781641267821367266715283643659749152264457938319185148303604827363623405060374573505789923003843438436174489383805098509083722050766328250349793203837202162624690093533478114438810603140565070517669964629947543608404988178019652088162307525611931821066493746994641048066011859814337589829896549720562117090677291541318153057715167624128318297771376531788973088699647168159229805877415594828532539839967464064556647594705830374653113373530876658380240145380423210673778776803592627231257495817394581607796277282644312510714532297108722017217547317744900647318022108570947064304280100418971450552007356891519523293614416944016354756866350050833501416942505071203810116719053430543531027953437436446745566839242129860410443198862219469972163224971258348314341755015213118628882713134766297624091644805801186976152536913514712919240503721680740586016832099946807466311777189050656676962849581383790904722087478646766320517056183581970236248227413322748304134245717987665377396011236706627320817654565682680006957454759981618023476448544673508068369492066566895437050571584345511070959483898938738225050292533674383091612495407126805381796487365892131916426837522671623266627483065655765705534239355214893395905702329340402794052884259146049064629582075576563307670749189662176976725361937046200576007893814439695301892528761187544161389682003509216791271836545495416676148151145195082668323677621182991451835324281863619641773620601014510950996746726615703771971266687151564427772359427340566909351858654807999781808513034680104078196607462166928018863385629928965649243954503391493597963417955268639606791452833692467872935741940362479842688642227725662504694679557678170929873774151037857807219938356152056997839625453727441947651198316190826615266016347740875615970031428012228328190610356706715662722241878767131224669837573607121539572299329404101274463156060298348931678277361174057097484704587036227686110677413094941011961262438027467952964727129462752693949019764164538344775554466171428121848999818969114034332797672927989107710137279281184295118233855942385256333164153378143279674287318136458207166174996112638689535976047617221520910027427485161965702038805161865494457444594178063766957037428053543239915792369877811053417485684498667123216132006378630814477106813088898563644909178779463295955587688067277368683836470612208483299572260344016516194247232298740800342116589984844356688576984553507410293250093945014209879983314562948451929862241009275783684229669718641013736581856815277185073259140534024850924787544871716174654424640728091372513505922826813145390369149590652886241000625495880523771672395227312971578042522330551788256261683080675549820375567692574152956993944504349004617185470945673049153218968830613586193253490318451871770642617802890083608004460414305421033261048294750210470303202846332054952531617433058538758154347087854561609738141615145103748777579733574989673510104836750248325511777237502526995647687215364262385606217553691332159421351598905950537513518351520709657614578131639854432532002236696200855408766520105076378983345708235918180749273124590433024519869147132931932462703067876214268579940066030521414045386366551780718510535469417760242493782392451178913322503092692423649855756521279456558275339921490892868856862895022564047205838132429286600764536839036698193759634186899291274131934296059833048690594627623595320676097721540716472990950611858372856271872423573251506230042608074167903809812264198034505185435990821356377966484742250577592243727298923187891299404854048446822719928239317254073429532989089675503790372464487057264894107613242300912487070053676379388189496900004239731820229886894053019610823763957809819187948639826973433528683168917360632750040517847686479093538683816924213175672979768822065627696943474914020483056384006872835738311110986586149510661361915342172527409078742250880056867149831149121019729847242037335904440063130981999650700416787683293610119590221942974317455716336227454789239793488032299063316588917505912406020220045264868457718282165158892171630470709599503997282778168097827497383884195820921583645621293941200045604062174334998171535030513366277293714389988219756129580868518167923841173364269774889246694435264051484911461988227011238661037602452710188911900438270362280391121270021679247152879324195035694278071477495720447513017171148877312193736366348711630105507365864598069586257026976295714123943691621672377694552248018987680338612382795605985191106112971398796002636340393693119651973344711646854574482999700397952536878348512983782198330513744803168936076427075943787200489575435147989033386529956551570669047103070223076797892329848058499725632813524581372640746415923016932853954152472487866287318545051065376430120748079948860283261855738836955246188128622509828635867225708782966017423170535046509131388753895013061151387840089512861842615441729962315731301087767989000918136617870582141517330935619268642915983553727587587676791953536960714236687847602589538927962585440961131240218794236944630211930970546118745080346860636620310193382167597465544174488399379683716417891139157575146359165023126594124268610800205258776019000550873739401445303129974560221438061891795442780328126230093178952504570380957199592993338719686487798275474853570100033092481743129836527369756194343789131822069107283156271772679863538216891518713732520976834628418347371261368933454629405371869789752684339805368137450825001203521193642598238954329102258317328098581116978343883611320940814793654745807336162557057195523274610323601685712314930799144191673243832283659669368716126815118360353441303009936083544193524336572930768154506567477565558211143508568396203781879592033787429012753106951129653074630840496376302289668286168325299592504054003803917262600195834001336180158836765599057537979745423711070158871650976475924365707758401328959478791343481250979029363644046972556422294698558561670817595994409985323205913035009923360820734795546082012200697671744573982535291905800552837118327702125018691644774560916230166739307705017656065679867259837178918123254219579594535869171376148397610005870749992910355727569593729567789260479930835305112462727870603529547312621720559953074675620549217314861961905983960910846471569192459257648138212674016814845327496495507412976753381357634960529826817906824433858135485518651632270319927880227571858035210375443324098235463619647723862420557582355632137583370066602155641218235815280874570372436217877316899649287051943247206509113311767578126e-4966
+-3.237587559719012555462219479113823276249784669017340504844942194598519770062059685508835745638324970127939070738424059838293609943191271023342555035986308991521396355375667467208367312819235870119724263252776995195727778126085574034035411017344128491238136414394551514178668780674015531193282296319913113495953953933831631032855605791532328598034154166422617226534880263244723830482289656875701701315902175019974435037627824356684033058939701577883356651733717468531204705842607568803666569711421917525834491783583598401321476176752039857173551930268891446850107760584333855521475305010940756813993214730850216669600967698749412592167692757446422169965426483919224341062751152057061076522973232731542382055087239368522167656194830741819605276971705738272393130698937532095725613383807312946395184980707534803490003540251394324459987958400939111001126190861523615485938285497714410609640798273816511769391568591823198476415765275534341709798367687043373145262933998108452661682659942586304978413812755518166239176614473815940025342279575304159493260770068030636885746695206392378276051948759263882079389379666940357441139816661913198656187703463519723262653223919257185751827493927586153153792077729913353547954808876263400200663495414360816863385220457719546338953323399286762099558324132103460225580066817535680886906060858264089074120360391613368274811868067637495154569071591624185979937989402513750464346904036668477876379544221432800037599944499161940321774835027752710681217554286366043661491013593886229615614494736186475932160549630939390542165126494166960681499481651861215529870984381726203476917507560266886692644952355421814201350137351435237036912624414444992497142303802423605897110605364956579914507108584002230524766331348271456591814078599780820974961968314684496428310691542272663818486132771177670874927831510002443658417608078383611526899905533629456904234997116303929427262032216072887961072267850618234492852606488522739744757845004694461812790342894353802938671928834585447328398711684245164703625580196678024410303542544534512706792134908369873605619756775207191558754413381571756431003248529020572648048946458999967788526617126349345966896362376841092268841417781414969315002419192181972121568811432459128737128140063645558482525300089060238860392371092102688097987915838860882370022268312322882235690785726190915062699382576041643741555139697348927957856990969985342299599797431503615312038393069808777315725367497595040966093808407117316369389112216628231869173217637452855462790553030636920487796465880633399632793882734473382168542596184679158149228725004404714293460752371865436947855237307240001863573081174929166645758276081272685156100195420794154740486637315823136798695124738873328565945598241199335059398955049459449844741098478330319112865980346771381982151154499846478545530650091824164892591396650703633600023191521502618379988693800703884555191647864959327260468892793195316578510173816406054364319294906641284764788384683586662382042642852654156477478700779123584369965723284711409361741235548687181052639639279285373139084165798451899763979500837428077782309910703522399860010310321116623028924118238023770381424894162717815296210097245221769714495449744327945091943394325259297771090128969600269822520904193880119094781214175887316220311309028456568749910010962366586834018403242866721783519806933018588077977626913774236680220258524711348037750591646286531625306510583751929280541119187219596706615736304036444366663256426643903386694536649648686380122198677895751002327229059364018755164517060321515091173358005987498359799467138817648881479418623694683454881683746841149715181334498096967702613110590140231345676956141227850879905018558219984441819798054463206764413100251255775535830770535620946159535406497134759043192647996190512978586496199656070707105117773853504277795024754647024165589129442822627147868917463795166386552921913398878270019905147510849518894114102536073369047160130990411626048426437835295683097278297774735181045158616674564080237813146623269215019613231938626758927531490945029356207933289363847181438902539297057969524961348607844569521442237914899100699610921669921572167164875488132527187949318543809703388178931170799769792886086681284964861608656928109305369539955846964197786677053847603962194721523867993048528558551380823699291873352033111096244814245789620930756114228971363838828108534030152031715929722499546436547773404017947035596936338462103946797525667033935433489292620531649199724400832489751788129365426568881328357966337292439204382537174357675404105580244018783685041224798457022189315692175787257287203633134300759209060570319508886475377719911176071302732819878165468592717406388218727585026352127436844762994722826390779737322113768842482160812973100323673863050234437722898796145596181862320550301285861980052194863780743808106946940079349630782676930197134206259739125377941060751175427888774493677478593805682322173891730311959284895178856039354015035864931073602059531001572891528828982167810245343327388887928886208615327002834690068636094325052251429781641267821367266715283643659749152264457938319185148303604827363623405060374573505789923003843438436174489383805098509083722050766328250349793203837202162624690093533478114438810603140565070517669964629947543608404988178019652088162307525611931821066493746994641048066011859814337589829896549720562117090677291541318153057715167624128318297771376531788973088699647168159229805877415594828532539839967464064556647594705830374653113373530876658380240145380423210673778776803592627231257495817394581607796277282644312510714532297108722017217547317744900647318022108570947064304280100418971450552007356891519523293614416944016354756866350050833501416942505071203810116719053430543531027953437436446745566839242129860410443198862219469972163224971258348314341755015213118628882713134766297624091644805801186976152536913514712919240503721680740586016832099946807466311777189050656676962849581383790904722087478646766320517056183581970236248227413322748304134245717987665377396011236706627320817654565682680006957454759981618023476448544673508068369492066566895437050571584345511070959483898938738225050292533674383091612495407126805381796487365892131916426837522671623266627483065655765705534239355214893395905702329340402794052884259146049064629582075576563307670749189662176976725361937046200576007893814439695301892528761187544161389682003509216791271836545495416676148151145195082668323677621182991451835324281863619641773620601014510950996746726615703771971266687151564427772359427340566909351858654807999781808513034680104078196607462166928018863385629928965649243954503391493597963417955268639606791452833692467872935741940362479842688642227725662504694679557678170929873774151037857807219938356152056997839625453727441947651198316190826615266016347740875615970031428012228328190610356706715662722241878767131224669837573607121539572299329404101274463156060298348931678277361174057097484704587036227686110677413094941011961262438027467952964727129462752693949019764164538344775554466171428121848999818969114034332797672927989107710137279281184295118233855942385256333164153378143279674287318136458207166174996112638689535976047617221520910027427485161965702038805161865494457444594178063766957037428053543239915792369877811053417485684498667123216132006378630814477106813088898563644909178779463295955587688067277368683836470612208483299572260344016516194247232298740800342116589984844356688576984553507410293250093945014209879983314562948451929862241009275783684229669718641013736581856815277185073259140534024850924787544871716174654424640728091372513505922826813145390369149590652886241000625495880523771672395227312971578042522330551788256261683080675549820375567692574152956993944504349004617185470945673049153218968830613586193253490318451871770642617802890083608004460414305421033261048294750210470303202846332054952531617433058538758154347087854561609738141615145103748777579733574989673510104836750248325511777237502526995647687215364262385606217553691332159421351598905950537513518351520709657614578131639854432532002236696200855408766520105076378983345708235918180749273124590433024519869147132931932462703067876214268579940066030521414045386366551780718510535469417760242493782392451178913322503092692423649855756521279456558275339921490892868856862895022564047205838132429286600764536839036698193759634186899291274131934296059833048690594627623595320676097721540716472990950611858372856271872423573251506230042608074167903809812264198034505185435990821356377966484742250577592243727298923187891299404854048446822719928239317254073429532989089675503790372464487057264894107613242300912487070053676379388189496900004239731820229886894053019610823763957809819187948639826973433528683168917360632750040517847686479093538683816924213175672979768822065627696943474914020483056384006872835738311110986586149510661361915342172527409078742250880056867149831149121019729847242037335904440063130981999650700416787683293610119590221942974317455716336227454789239793488032299063316588917505912406020220045264868457718282165158892171630470709599503997282778168097827497383884195820921583645621293941200045604062174334998171535030513366277293714389988219756129580868518167923841173364269774889246694435264051484911461988227011238661037602452710188911900438270362280391121270021679247152879324195035694278071477495720447513017171148877312193736366348711630105507365864598069586257026976295714123943691621672377694552248018987680338612382795605985191106112971398796002636340393693119651973344711646854574482999700397952536878348512983782198330513744803168936076427075943787200489575435147989033386529956551570669047103070223076797892329848058499725632813524581372640746415923016932853954152472487866287318545051065376430120748079948860283261855738836955246188128622509828635867225708782966017423170535046509131388753895013061151387840089512861842615441729962315731301087767989000918136617870582141517330935619268642915983553727587587676791953536960714236687847602589538927962585440961131240218794236944630211930970546118745080346860636620310193382167597465544174488399379683716417891139157575146359165023126594124268610800205258776019000550873739401445303129974560221438061891795442780328126230093178952504570380957199592993338719686487798275474853570100033092481743129836527369756194343789131822069107283156271772679863538216891518713732520976834628418347371261368933454629405371869789752684339805368137450825001203521193642598238954329102258317328098581116978343883611320940814793654745807336162557057195523274610323601685712314930799144191673243832283659669368716126815118360353441303009936083544193524336572930768154506567477565558211143508568396203781879592033787429012753106951129653074630840496376302289668286168325299592504054003803917262600195834001336180158836765599057537979745423711070158871650976475924365707758401328959478791343481250979029363644046972556422294698558561670817595994409985323205913035009923360820734795546082012200697671744573982535291905800552837118327702125018691644774560916230166739307705017656065679867259837178918123254219579594535869171376148397610005870749992910355727569593729567789260479930835305112462727870603529547312621720559953074675620549217314861961905983960910846471569192459257648138212674016814845327496495507412976753381357634960529826817906824433858135485518651632270319927880227571858035210375443324098235463619647723862420557582355632137583370066602155641218235815280874570372436217877316899649287051943247206509113311767578124e-4966
+-3.237587559719012555462219479113823276249784669017340504844942194598519770062059685508835745638324970127939070738424059838293609943191271023342555035986308991521396355375667467208367312819235870119724263252776995195727778126085574034035411017344128491238136414394551514178668780674015531193282296319913113495953953933831631032855605791532328598034154166422617226534880263244723830482289656875701701315902175019974435037627824356684033058939701577883356651733717468531204705842607568803666569711421917525834491783583598401321476176752039857173551930268891446850107760584333855521475305010940756813993214730850216669600967698749412592167692757446422169965426483919224341062751152057061076522973232731542382055087239368522167656194830741819605276971705738272393130698937532095725613383807312946395184980707534803490003540251394324459987958400939111001126190861523615485938285497714410609640798273816511769391568591823198476415765275534341709798367687043373145262933998108452661682659942586304978413812755518166239176614473815940025342279575304159493260770068030636885746695206392378276051948759263882079389379666940357441139816661913198656187703463519723262653223919257185751827493927586153153792077729913353547954808876263400200663495414360816863385220457719546338953323399286762099558324132103460225580066817535680886906060858264089074120360391613368274811868067637495154569071591624185979937989402513750464346904036668477876379544221432800037599944499161940321774835027752710681217554286366043661491013593886229615614494736186475932160549630939390542165126494166960681499481651861215529870984381726203476917507560266886692644952355421814201350137351435237036912624414444992497142303802423605897110605364956579914507108584002230524766331348271456591814078599780820974961968314684496428310691542272663818486132771177670874927831510002443658417608078383611526899905533629456904234997116303929427262032216072887961072267850618234492852606488522739744757845004694461812790342894353802938671928834585447328398711684245164703625580196678024410303542544534512706792134908369873605619756775207191558754413381571756431003248529020572648048946458999967788526617126349345966896362376841092268841417781414969315002419192181972121568811432459128737128140063645558482525300089060238860392371092102688097987915838860882370022268312322882235690785726190915062699382576041643741555139697348927957856990969985342299599797431503615312038393069808777315725367497595040966093808407117316369389112216628231869173217637452855462790553030636920487796465880633399632793882734473382168542596184679158149228725004404714293460752371865436947855237307240001863573081174929166645758276081272685156100195420794154740486637315823136798695124738873328565945598241199335059398955049459449844741098478330319112865980346771381982151154499846478545530650091824164892591396650703633600023191521502618379988693800703884555191647864959327260468892793195316578510173816406054364319294906641284764788384683586662382042642852654156477478700779123584369965723284711409361741235548687181052639639279285373139084165798451899763979500837428077782309910703522399860010310321116623028924118238023770381424894162717815296210097245221769714495449744327945091943394325259297771090128969600269822520904193880119094781214175887316220311309028456568749910010962366586834018403242866721783519806933018588077977626913774236680220258524711348037750591646286531625306510583751929280541119187219596706615736304036444366663256426643903386694536649648686380122198677895751002327229059364018755164517060321515091173358005987498359799467138817648881479418623694683454881683746841149715181334498096967702613110590140231345676956141227850879905018558219984441819798054463206764413100251255775535830770535620946159535406497134759043192647996190512978586496199656070707105117773853504277795024754647024165589129442822627147868917463795166386552921913398878270019905147510849518894114102536073369047160130990411626048426437835295683097278297774735181045158616674564080237813146623269215019613231938626758927531490945029356207933289363847181438902539297057969524961348607844569521442237914899100699610921669921572167164875488132527187949318543809703388178931170799769792886086681284964861608656928109305369539955846964197786677053847603962194721523867993048528558551380823699291873352033111096244814245789620930756114228971363838828108534030152031715929722499546436547773404017947035596936338462103946797525667033935433489292620531649199724400832489751788129365426568881328357966337292439204382537174357675404105580244018783685041224798457022189315692175787257287203633134300759209060570319508886475377719911176071302732819878165468592717406388218727585026352127436844762994722826390779737322113768842482160812973100323673863050234437722898796145596181862320550301285861980052194863780743808106946940079349630782676930197134206259739125377941060751175427888774493677478593805682322173891730311959284895178856039354015035864931073602059531001572891528828982167810245343327388887928886208615327002834690068636094325052251429781641267821367266715283643659749152264457938319185148303604827363623405060374573505789923003843438436174489383805098509083722050766328250349793203837202162624690093533478114438810603140565070517669964629947543608404988178019652088162307525611931821066493746994641048066011859814337589829896549720562117090677291541318153057715167624128318297771376531788973088699647168159229805877415594828532539839967464064556647594705830374653113373530876658380240145380423210673778776803592627231257495817394581607796277282644312510714532297108722017217547317744900647318022108570947064304280100418971450552007356891519523293614416944016354756866350050833501416942505071203810116719053430543531027953437436446745566839242129860410443198862219469972163224971258348314341755015213118628882713134766297624091644805801186976152536913514712919240503721680740586016832099946807466311777189050656676962849581383790904722087478646766320517056183581970236248227413322748304134245717987665377396011236706627320817654565682680006957454759981618023476448544673508068369492066566895437050571584345511070959483898938738225050292533674383091612495407126805381796487365892131916426837522671623266627483065655765705534239355214893395905702329340402794052884259146049064629582075576563307670749189662176976725361937046200576007893814439695301892528761187544161389682003509216791271836545495416676148151145195082668323677621182991451835324281863619641773620601014510950996746726615703771971266687151564427772359427340566909351858654807999781808513034680104078196607462166928018863385629928965649243954503391493597963417955268639606791452833692467872935741940362479842688642227725662504694679557678170929873774151037857807219938356152056997839625453727441947651198316190826615266016347740875615970031428012228328190610356706715662722241878767131224669837573607121539572299329404101274463156060298348931678277361174057097484704587036227686110677413094941011961262438027467952964727129462752693949019764164538344775554466171428121848999818969114034332797672927989107710137279281184295118233855942385256333164153378143279674287318136458207166174996112638689535976047617221520910027427485161965702038805161865494457444594178063766957037428053543239915792369877811053417485684498667123216132006378630814477106813088898563644909178779463295955587688067277368683836470612208483299572260344016516194247232298740800342116589984844356688576984553507410293250093945014209879983314562948451929862241009275783684229669718641013736581856815277185073259140534024850924787544871716174654424640728091372513505922826813145390369149590652886241000625495880523771672395227312971578042522330551788256261683080675549820375567692574152956993944504349004617185470945673049153218968830613586193253490318451871770642617802890083608004460414305421033261048294750210470303202846332054952531617433058538758154347087854561609738141615145103748777579733574989673510104836750248325511777237502526995647687215364262385606217553691332159421351598905950537513518351520709657614578131639854432532002236696200855408766520105076378983345708235918180749273124590433024519869147132931932462703067876214268579940066030521414045386366551780718510535469417760242493782392451178913322503092692423649855756521279456558275339921490892868856862895022564047205838132429286600764536839036698193759634186899291274131934296059833048690594627623595320676097721540716472990950611858372856271872423573251506230042608074167903809812264198034505185435990821356377966484742250577592243727298923187891299404854048446822719928239317254073429532989089675503790372464487057264894107613242300912487070053676379388189496900004239731820229886894053019610823763957809819187948639826973433528683168917360632750040517847686479093538683816924213175672979768822065627696943474914020483056384006872835738311110986586149510661361915342172527409078742250880056867149831149121019729847242037335904440063130981999650700416787683293610119590221942974317455716336227454789239793488032299063316588917505912406020220045264868457718282165158892171630470709599503997282778168097827497383884195820921583645621293941200045604062174334998171535030513366277293714389988219756129580868518167923841173364269774889246694435264051484911461988227011238661037602452710188911900438270362280391121270021679247152879324195035694278071477495720447513017171148877312193736366348711630105507365864598069586257026976295714123943691621672377694552248018987680338612382795605985191106112971398796002636340393693119651973344711646854574482999700397952536878348512983782198330513744803168936076427075943787200489575435147989033386529956551570669047103070223076797892329848058499725632813524581372640746415923016932853954152472487866287318545051065376430120748079948860283261855738836955246188128622509828635867225708782966017423170535046509131388753895013061151387840089512861842615441729962315731301087767989000918136617870582141517330935619268642915983553727587587676791953536960714236687847602589538927962585440961131240218794236944630211930970546118745080346860636620310193382167597465544174488399379683716417891139157575146359165023126594124268610800205258776019000550873739401445303129974560221438061891795442780328126230093178952504570380957199592993338719686487798275474853570100033092481743129836527369756194343789131822069107283156271772679863538216891518713732520976834628418347371261368933454629405371869789752684339805368137450825001203521193642598238954329102258317328098581116978343883611320940814793654745807336162557057195523274610323601685712314930799144191673243832283659669368716126815118360353441303009936083544193524336572930768154506567477565558211143508568396203781879592033787429012753106951129653074630840496376302289668286168325299592504054003803917262600195834001336180158836765599057537979745423711070158871650976475924365707758401328959478791343481250979029363644046972556422294698558561670817595994409985323205913035009923360820734795546082012200697671744573982535291905800552837118327702125018691644774560916230166739307705017656065679867259837178918123254219579594535869171376148397610005870749992910355727569593729567789260479930835305112462727870603529547312621720559953074675620549217314861961905983960910846471569192459257648138212674016814845327496495507412976753381357634960529826817906824433858135485518651632270319927880227571858035210375443324098235463619647723862420557582355632137583370066602155641218235815280874570372436217877316899649287051943247206509113311767578125e-4966
+-3.237587559719012555462219479113823276249784669017340504844942194598519770062059685508835745638324970127939070738424059838293609943191271023342555035986308991521396355375667467208367312819235870119724263252776995195727778126085574034035411017344128491238136414394551514178668780674015531193282296319913113495953953933831631032855605791532328598034154166422617226534880263244723830482289656875701701315902175019974435037627824356684033058939701577883356651733717468531204705842607568803666569711421917525834491783583598401321476176752039857173551930268891446850107760584333855521475305010940756813993214730850216669600967698749412592167692757446422169965426483919224341062751152057061076522973232731542382055087239368522167656194830741819605276971705738272393130698937532095725613383807312946395184980707534803490003540251394324459987958400939111001126190861523615485938285497714410609640798273816511769391568591823198476415765275534341709798367687043373145262933998108452661682659942586304978413812755518166239176614473815940025342279575304159493260770068030636885746695206392378276051948759263882079389379666940357441139816661913198656187703463519723262653223919257185751827493927586153153792077729913353547954808876263400200663495414360816863385220457719546338953323399286762099558324132103460225580066817535680886906060858264089074120360391613368274811868067637495154569071591624185979937989402513750464346904036668477876379544221432800037599944499161940321774835027752710681217554286366043661491013593886229615614494736186475932160549630939390542165126494166960681499481651861215529870984381726203476917507560266886692644952355421814201350137351435237036912624414444992497142303802423605897110605364956579914507108584002230524766331348271456591814078599780820974961968314684496428310691542272663818486132771177670874927831510002443658417608078383611526899905533629456904234997116303929427262032216072887961072267850618234492852606488522739744757845004694461812790342894353802938671928834585447328398711684245164703625580196678024410303542544534512706792134908369873605619756775207191558754413381571756431003248529020572648048946458999967788526617126349345966896362376841092268841417781414969315002419192181972121568811432459128737128140063645558482525300089060238860392371092102688097987915838860882370022268312322882235690785726190915062699382576041643741555139697348927957856990969985342299599797431503615312038393069808777315725367497595040966093808407117316369389112216628231869173217637452855462790553030636920487796465880633399632793882734473382168542596184679158149228725004404714293460752371865436947855237307240001863573081174929166645758276081272685156100195420794154740486637315823136798695124738873328565945598241199335059398955049459449844741098478330319112865980346771381982151154499846478545530650091824164892591396650703633600023191521502618379988693800703884555191647864959327260468892793195316578510173816406054364319294906641284764788384683586662382042642852654156477478700779123584369965723284711409361741235548687181052639639279285373139084165798451899763979500837428077782309910703522399860010310321116623028924118238023770381424894162717815296210097245221769714495449744327945091943394325259297771090128969600269822520904193880119094781214175887316220311309028456568749910010962366586834018403242866721783519806933018588077977626913774236680220258524711348037750591646286531625306510583751929280541119187219596706615736304036444366663256426643903386694536649648686380122198677895751002327229059364018755164517060321515091173358005987498359799467138817648881479418623694683454881683746841149715181334498096967702613110590140231345676956141227850879905018558219984441819798054463206764413100251255775535830770535620946159535406497134759043192647996190512978586496199656070707105117773853504277795024754647024165589129442822627147868917463795166386552921913398878270019905147510849518894114102536073369047160130990411626048426437835295683097278297774735181045158616674564080237813146623269215019613231938626758927531490945029356207933289363847181438902539297057969524961348607844569521442237914899100699610921669921572167164875488132527187949318543809703388178931170799769792886086681284964861608656928109305369539955846964197786677053847603962194721523867993048528558551380823699291873352033111096244814245789620930756114228971363838828108534030152031715929722499546436547773404017947035596936338462103946797525667033935433489292620531649199724400832489751788129365426568881328357966337292439204382537174357675404105580244018783685041224798457022189315692175787257287203633134300759209060570319508886475377719911176071302732819878165468592717406388218727585026352127436844762994722826390779737322113768842482160812973100323673863050234437722898796145596181862320550301285861980052194863780743808106946940079349630782676930197134206259739125377941060751175427888774493677478593805682322173891730311959284895178856039354015035864931073602059531001572891528828982167810245343327388887928886208615327002834690068636094325052251429781641267821367266715283643659749152264457938319185148303604827363623405060374573505789923003843438436174489383805098509083722050766328250349793203837202162624690093533478114438810603140565070517669964629947543608404988178019652088162307525611931821066493746994641048066011859814337589829896549720562117090677291541318153057715167624128318297771376531788973088699647168159229805877415594828532539839967464064556647594705830374653113373530876658380240145380423210673778776803592627231257495817394581607796277282644312510714532297108722017217547317744900647318022108570947064304280100418971450552007356891519523293614416944016354756866350050833501416942505071203810116719053430543531027953437436446745566839242129860410443198862219469972163224971258348314341755015213118628882713134766297624091644805801186976152536913514712919240503721680740586016832099946807466311777189050656676962849581383790904722087478646766320517056183581970236248227413322748304134245717987665377396011236706627320817654565682680006957454759981618023476448544673508068369492066566895437050571584345511070959483898938738225050292533674383091612495407126805381796487365892131916426837522671623266627483065655765705534239355214893395905702329340402794052884259146049064629582075576563307670749189662176976725361937046200576007893814439695301892528761187544161389682003509216791271836545495416676148151145195082668323677621182991451835324281863619641773620601014510950996746726615703771971266687151564427772359427340566909351858654807999781808513034680104078196607462166928018863385629928965649243954503391493597963417955268639606791452833692467872935741940362479842688642227725662504694679557678170929873774151037857807219938356152056997839625453727441947651198316190826615266016347740875615970031428012228328190610356706715662722241878767131224669837573607121539572299329404101274463156060298348931678277361174057097484704587036227686110677413094941011961262438027467952964727129462752693949019764164538344775554466171428121848999818969114034332797672927989107710137279281184295118233855942385256333164153378143279674287318136458207166174996112638689535976047617221520910027427485161965702038805161865494457444594178063766957037428053543239915792369877811053417485684498667123216132006378630814477106813088898563644909178779463295955587688067277368683836470612208483299572260344016516194247232298740800342116589984844356688576984553507410293250093945014209879983314562948451929862241009275783684229669718641013736581856815277185073259140534024850924787544871716174654424640728091372513505922826813145390369149590652886241000625495880523771672395227312971578042522330551788256261683080675549820375567692574152956993944504349004617185470945673049153218968830613586193253490318451871770642617802890083608004460414305421033261048294750210470303202846332054952531617433058538758154347087854561609738141615145103748777579733574989673510104836750248325511777237502526995647687215364262385606217553691332159421351598905950537513518351520709657614578131639854432532002236696200855408766520105076378983345708235918180749273124590433024519869147132931932462703067876214268579940066030521414045386366551780718510535469417760242493782392451178913322503092692423649855756521279456558275339921490892868856862895022564047205838132429286600764536839036698193759634186899291274131934296059833048690594627623595320676097721540716472990950611858372856271872423573251506230042608074167903809812264198034505185435990821356377966484742250577592243727298923187891299404854048446822719928239317254073429532989089675503790372464487057264894107613242300912487070053676379388189496900004239731820229886894053019610823763957809819187948639826973433528683168917360632750040517847686479093538683816924213175672979768822065627696943474914020483056384006872835738311110986586149510661361915342172527409078742250880056867149831149121019729847242037335904440063130981999650700416787683293610119590221942974317455716336227454789239793488032299063316588917505912406020220045264868457718282165158892171630470709599503997282778168097827497383884195820921583645621293941200045604062174334998171535030513366277293714389988219756129580868518167923841173364269774889246694435264051484911461988227011238661037602452710188911900438270362280391121270021679247152879324195035694278071477495720447513017171148877312193736366348711630105507365864598069586257026976295714123943691621672377694552248018987680338612382795605985191106112971398796002636340393693119651973344711646854574482999700397952536878348512983782198330513744803168936076427075943787200489575435147989033386529956551570669047103070223076797892329848058499725632813524581372640746415923016932853954152472487866287318545051065376430120748079948860283261855738836955246188128622509828635867225708782966017423170535046509131388753895013061151387840089512861842615441729962315731301087767989000918136617870582141517330935619268642915983553727587587676791953536960714236687847602589538927962585440961131240218794236944630211930970546118745080346860636620310193382167597465544174488399379683716417891139157575146359165023126594124268610800205258776019000550873739401445303129974560221438061891795442780328126230093178952504570380957199592993338719686487798275474853570100033092481743129836527369756194343789131822069107283156271772679863538216891518713732520976834628418347371261368933454629405371869789752684339805368137450825001203521193642598238954329102258317328098581116978343883611320940814793654745807336162557057195523274610323601685712314930799144191673243832283659669368716126815118360353441303009936083544193524336572930768154506567477565558211143508568396203781879592033787429012753106951129653074630840496376302289668286168325299592504054003803917262600195834001336180158836765599057537979745423711070158871650976475924365707758401328959478791343481250979029363644046972556422294698558561670817595994409985323205913035009923360820734795546082012200697671744573982535291905800552837118327702125018691644774560916230166739307705017656065679867259837178918123254219579594535869171376148397610005870749992910355727569593729567789260479930835305112462727870603529547312621720559953074675620549217314861961905983960910846471569192459257648138212674016814845327496495507412976753381357634960529826817906824433858135485518651632270319927880227571858035210375443324098235463619647723862420557582355632137583370066602155641218235815280874570372436217877316899649287051943247206509113311767578126e-4966
diff --git a/REORG.TODO/stdlib/tst-strtod-round-data.h b/REORG.TODO/stdlib/tst-strtod-round-data.h
new file mode 100644
index 0000000000..fc09bc9117
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-strtod-round-data.h
@@ -0,0 +1,11584 @@
+/* This file was generated by gen-tst-strtod-round.c from tst-strtod-round-data.  */
+static const struct test tests[] = {
+  TEST ("3.518437208883201171875E+013",
+	false,
+	0x2p+44,
+	0x2p+44,
+	0x2p+44,
+	0x2.000004p+44,
+	false,
+	0x2.0000000000002p+44,
+	0x2.0000000000004p+44,
+	0x2.0000000000002p+44,
+	0x2.0000000000004p+44,
+	true,
+	0x2.0000000000003p+44,
+	0x2.0000000000003p+44,
+	0x2.0000000000003p+44,
+	0x2.0000000000003p+44,
+	true,
+	0x2.0000000000003p+44,
+	0x2.0000000000003p+44,
+	0x2.0000000000003p+44,
+	0x2.0000000000003p+44,
+	true,
+	0x2.0000000000003p+44,
+	0x2.0000000000003p+44,
+	0x2.0000000000003p+44,
+	0x2.0000000000003p+44,
+	true,
+	0x2.0000000000003p+44,
+	0x2.0000000000003p+44,
+	0x2.0000000000003p+44,
+	0x2.0000000000003p+44),
+  TEST ("1.00000005960464477550",
+	false,
+	0x1p+0,
+	0x1.000002p+0,
+	0x1p+0,
+	0x1.000002p+0,
+	false,
+	0x1.000001p+0,
+	0x1.000001p+0,
+	0x1.000001p+0,
+	0x1.0000010000001p+0,
+	false,
+	0x1.0000010000000002p+0,
+	0x1.0000010000000002p+0,
+	0x1.0000010000000002p+0,
+	0x1.0000010000000004p+0,
+	false,
+	0x1.0000010000000002p+0,
+	0x1.0000010000000002p+0,
+	0x1.0000010000000002p+0,
+	0x1.0000010000000004p+0,
+	false,
+	0x1.0000010000000002048242f2ffp+0,
+	0x1.0000010000000002048242f2ff8p+0,
+	0x1.0000010000000002048242f2ffp+0,
+	0x1.0000010000000002048242f2ff8p+0,
+	false,
+	0x1.0000010000000002048242f2ff66p+0,
+	0x1.0000010000000002048242f2ff67p+0,
+	0x1.0000010000000002048242f2ff66p+0,
+	0x1.0000010000000002048242f2ff67p+0),
+  TEST ("1.0000000596046447755",
+	false,
+	0x1p+0,
+	0x1.000002p+0,
+	0x1p+0,
+	0x1.000002p+0,
+	false,
+	0x1.000001p+0,
+	0x1.000001p+0,
+	0x1.000001p+0,
+	0x1.0000010000001p+0,
+	false,
+	0x1.0000010000000002p+0,
+	0x1.0000010000000002p+0,
+	0x1.0000010000000002p+0,
+	0x1.0000010000000004p+0,
+	false,
+	0x1.0000010000000002p+0,
+	0x1.0000010000000002p+0,
+	0x1.0000010000000002p+0,
+	0x1.0000010000000004p+0,
+	false,
+	0x1.0000010000000002048242f2ffp+0,
+	0x1.0000010000000002048242f2ff8p+0,
+	0x1.0000010000000002048242f2ffp+0,
+	0x1.0000010000000002048242f2ff8p+0,
+	false,
+	0x1.0000010000000002048242f2ff66p+0,
+	0x1.0000010000000002048242f2ff67p+0,
+	0x1.0000010000000002048242f2ff66p+0,
+	0x1.0000010000000002048242f2ff67p+0),
+  TEST ("1.000000059604644776",
+	false,
+	0x1p+0,
+	0x1.000002p+0,
+	0x1p+0,
+	0x1.000002p+0,
+	false,
+	0x1.000001p+0,
+	0x1.000001p+0,
+	0x1.000001p+0,
+	0x1.0000010000001p+0,
+	false,
+	0x1.000001000000000ap+0,
+	0x1.000001000000000cp+0,
+	0x1.000001000000000ap+0,
+	0x1.000001000000000cp+0,
+	false,
+	0x1.000001000000000ap+0,
+	0x1.000001000000000cp+0,
+	0x1.000001000000000ap+0,
+	0x1.000001000000000cp+0,
+	false,
+	0x1.000001000000000b3db12bdc21p+0,
+	0x1.000001000000000b3db12bdc21p+0,
+	0x1.000001000000000b3db12bdc21p+0,
+	0x1.000001000000000b3db12bdc218p+0,
+	false,
+	0x1.000001000000000b3db12bdc213cp+0,
+	0x1.000001000000000b3db12bdc213dp+0,
+	0x1.000001000000000b3db12bdc213cp+0,
+	0x1.000001000000000b3db12bdc213dp+0),
+  TEST ("1.000000059604644775",
+	false,
+	0x1p+0,
+	0x1p+0,
+	0x1p+0,
+	0x1.000002p+0,
+	false,
+	0x1.000000fffffffp+0,
+	0x1.000001p+0,
+	0x1.000000fffffffp+0,
+	0x1.000001p+0,
+	false,
+	0x1.000000fffffffff8p+0,
+	0x1.000000fffffffff8p+0,
+	0x1.000000fffffffff8p+0,
+	0x1.000000fffffffffap+0,
+	false,
+	0x1.000000fffffffff8p+0,
+	0x1.000000fffffffff8p+0,
+	0x1.000000fffffffff8p+0,
+	0x1.000000fffffffffap+0,
+	false,
+	0x1.000000fffffffff8cb535a09dd8p+0,
+	0x1.000000fffffffff8cb535a09dd8p+0,
+	0x1.000000fffffffff8cb535a09dd8p+0,
+	0x1.000000fffffffff8cb535a09dep+0,
+	false,
+	0x1.000000fffffffff8cb535a09dd9p+0,
+	0x1.000000fffffffff8cb535a09dd91p+0,
+	0x1.000000fffffffff8cb535a09dd9p+0,
+	0x1.000000fffffffff8cb535a09dd91p+0),
+  TEST ("1.00000005960464478",
+	false,
+	0x1p+0,
+	0x1.000002p+0,
+	0x1p+0,
+	0x1.000002p+0,
+	false,
+	0x1.000001p+0,
+	0x1.000001p+0,
+	0x1.000001p+0,
+	0x1.0000010000001p+0,
+	false,
+	0x1.0000010000000054p+0,
+	0x1.0000010000000056p+0,
+	0x1.0000010000000054p+0,
+	0x1.0000010000000056p+0,
+	false,
+	0x1.0000010000000054p+0,
+	0x1.0000010000000056p+0,
+	0x1.0000010000000054p+0,
+	0x1.0000010000000056p+0,
+	false,
+	0x1.0000010000000055072873252f8p+0,
+	0x1.0000010000000055072873253p+0,
+	0x1.0000010000000055072873252f8p+0,
+	0x1.0000010000000055072873253p+0,
+	false,
+	0x1.0000010000000055072873252febp+0,
+	0x1.0000010000000055072873252febp+0,
+	0x1.0000010000000055072873252febp+0,
+	0x1.0000010000000055072873252fecp+0),
+  TEST ("1.0000000596046448",
+	false,
+	0x1p+0,
+	0x1.000002p+0,
+	0x1p+0,
+	0x1.000002p+0,
+	false,
+	0x1.000001p+0,
+	0x1.000001p+0,
+	0x1.000001p+0,
+	0x1.0000010000001p+0,
+	false,
+	0x1.00000100000001c4p+0,
+	0x1.00000100000001c6p+0,
+	0x1.00000100000001c4p+0,
+	0x1.00000100000001c6p+0,
+	false,
+	0x1.00000100000001c4p+0,
+	0x1.00000100000001c6p+0,
+	0x1.00000100000001c4p+0,
+	0x1.00000100000001c6p+0,
+	false,
+	0x1.00000100000001c5f67cd79279p+0,
+	0x1.00000100000001c5f67cd792798p+0,
+	0x1.00000100000001c5f67cd79279p+0,
+	0x1.00000100000001c5f67cd792798p+0,
+	false,
+	0x1.00000100000001c5f67cd7927953p+0,
+	0x1.00000100000001c5f67cd7927954p+0,
+	0x1.00000100000001c5f67cd7927953p+0,
+	0x1.00000100000001c5f67cd7927954p+0),
+  TEST ("1.000000059604645",
+	false,
+	0x1p+0,
+	0x1.000002p+0,
+	0x1p+0,
+	0x1.000002p+0,
+	false,
+	0x1.0000010000001p+0,
+	0x1.0000010000001p+0,
+	0x1.0000010000001p+0,
+	0x1.0000010000002p+0,
+	false,
+	0x1.000001000000102ep+0,
+	0x1.000001000000103p+0,
+	0x1.000001000000102ep+0,
+	0x1.000001000000103p+0,
+	false,
+	0x1.000001000000102ep+0,
+	0x1.000001000000103p+0,
+	0x1.000001000000102ep+0,
+	0x1.000001000000103p+0,
+	false,
+	0x1.000001000000102f4fc8c3d757p+0,
+	0x1.000001000000102f4fc8c3d7578p+0,
+	0x1.000001000000102f4fc8c3d757p+0,
+	0x1.000001000000102f4fc8c3d7578p+0,
+	false,
+	0x1.000001000000102f4fc8c3d75769p+0,
+	0x1.000001000000102f4fc8c3d75769p+0,
+	0x1.000001000000102f4fc8c3d75769p+0,
+	0x1.000001000000102f4fc8c3d7576ap+0),
+  TEST ("1.00000005960464",
+	false,
+	0x1p+0,
+	0x1p+0,
+	0x1p+0,
+	0x1.000002p+0,
+	false,
+	0x1.000000fffffeap+0,
+	0x1.000000fffffeap+0,
+	0x1.000000fffffeap+0,
+	0x1.000000fffffebp+0,
+	false,
+	0x1.000000fffffea7e4p+0,
+	0x1.000000fffffea7e6p+0,
+	0x1.000000fffffea7e4p+0,
+	0x1.000000fffffea7e6p+0,
+	false,
+	0x1.000000fffffea7e4p+0,
+	0x1.000000fffffea7e6p+0,
+	0x1.000000fffffea7e4p+0,
+	0x1.000000fffffea7e6p+0,
+	false,
+	0x1.000000fffffea7e5975eb11da7p+0,
+	0x1.000000fffffea7e5975eb11da78p+0,
+	0x1.000000fffffea7e5975eb11da7p+0,
+	0x1.000000fffffea7e5975eb11da78p+0,
+	false,
+	0x1.000000fffffea7e5975eb11da74ap+0,
+	0x1.000000fffffea7e5975eb11da74bp+0,
+	0x1.000000fffffea7e5975eb11da74ap+0,
+	0x1.000000fffffea7e5975eb11da74bp+0),
+  TEST ("1.0000000596046",
+	false,
+	0x1p+0,
+	0x1p+0,
+	0x1p+0,
+	0x1.000002p+0,
+	false,
+	0x1.000000fffff36p+0,
+	0x1.000000fffff36p+0,
+	0x1.000000fffff36p+0,
+	0x1.000000fffff37p+0,
+	false,
+	0x1.000000fffff36596p+0,
+	0x1.000000fffff36598p+0,
+	0x1.000000fffff36596p+0,
+	0x1.000000fffff36598p+0,
+	false,
+	0x1.000000fffff36596p+0,
+	0x1.000000fffff36598p+0,
+	0x1.000000fffff36596p+0,
+	0x1.000000fffff36598p+0,
+	false,
+	0x1.000000fffff36597d40e1b5026p+0,
+	0x1.000000fffff36597d40e1b50268p+0,
+	0x1.000000fffff36597d40e1b5026p+0,
+	0x1.000000fffff36597d40e1b50268p+0,
+	false,
+	0x1.000000fffff36597d40e1b502655p+0,
+	0x1.000000fffff36597d40e1b502656p+0,
+	0x1.000000fffff36597d40e1b502655p+0,
+	0x1.000000fffff36597d40e1b502656p+0),
+  TEST ("1.000000059605",
+	false,
+	0x1p+0,
+	0x1.000002p+0,
+	0x1p+0,
+	0x1.000002p+0,
+	false,
+	0x1.000001000063fp+0,
+	0x1.000001000064p+0,
+	0x1.000001000063fp+0,
+	0x1.000001000064p+0,
+	false,
+	0x1.000001000063fcap+0,
+	0x1.000001000063fca2p+0,
+	0x1.000001000063fcap+0,
+	0x1.000001000063fca2p+0,
+	false,
+	0x1.000001000063fcap+0,
+	0x1.000001000063fca2p+0,
+	0x1.000001000063fcap+0,
+	0x1.000001000063fca2p+0,
+	false,
+	0x1.000001000063fca17533f5572f8p+0,
+	0x1.000001000063fca17533f5573p+0,
+	0x1.000001000063fca17533f5572f8p+0,
+	0x1.000001000063fca17533f5573p+0,
+	false,
+	0x1.000001000063fca17533f5572fe9p+0,
+	0x1.000001000063fca17533f5572feap+0,
+	0x1.000001000063fca17533f5572fe9p+0,
+	0x1.000001000063fca17533f5572feap+0),
+  TEST ("1.00000005960",
+	false,
+	0x1p+0,
+	0x1p+0,
+	0x1p+0,
+	0x1.000002p+0,
+	false,
+	0x1.000000fffae49p+0,
+	0x1.000000fffae4ap+0,
+	0x1.000000fffae49p+0,
+	0x1.000000fffae4ap+0,
+	false,
+	0x1.000000fffae49ca8p+0,
+	0x1.000000fffae49caap+0,
+	0x1.000000fffae49ca8p+0,
+	0x1.000000fffae49caap+0,
+	false,
+	0x1.000000fffae49ca8p+0,
+	0x1.000000fffae49caap+0,
+	0x1.000000fffae49ca8p+0,
+	0x1.000000fffae49caap+0,
+	false,
+	0x1.000000fffae49ca916dacfff38p+0,
+	0x1.000000fffae49ca916dacfff38p+0,
+	0x1.000000fffae49ca916dacfff38p+0,
+	0x1.000000fffae49ca916dacfff388p+0,
+	false,
+	0x1.000000fffae49ca916dacfff382dp+0,
+	0x1.000000fffae49ca916dacfff382dp+0,
+	0x1.000000fffae49ca916dacfff382dp+0,
+	0x1.000000fffae49ca916dacfff382ep+0),
+  TEST ("1.0000000596",
+	false,
+	0x1p+0,
+	0x1p+0,
+	0x1p+0,
+	0x1.000002p+0,
+	false,
+	0x1.000000fffae49p+0,
+	0x1.000000fffae4ap+0,
+	0x1.000000fffae49p+0,
+	0x1.000000fffae4ap+0,
+	false,
+	0x1.000000fffae49ca8p+0,
+	0x1.000000fffae49caap+0,
+	0x1.000000fffae49ca8p+0,
+	0x1.000000fffae49caap+0,
+	false,
+	0x1.000000fffae49ca8p+0,
+	0x1.000000fffae49caap+0,
+	0x1.000000fffae49ca8p+0,
+	0x1.000000fffae49caap+0,
+	false,
+	0x1.000000fffae49ca916dacfff38p+0,
+	0x1.000000fffae49ca916dacfff38p+0,
+	0x1.000000fffae49ca916dacfff38p+0,
+	0x1.000000fffae49ca916dacfff388p+0,
+	false,
+	0x1.000000fffae49ca916dacfff382dp+0,
+	0x1.000000fffae49ca916dacfff382dp+0,
+	0x1.000000fffae49ca916dacfff382dp+0,
+	0x1.000000fffae49ca916dacfff382ep+0),
+  TEST ("1.000000060",
+	false,
+	0x1p+0,
+	0x1.000002p+0,
+	0x1p+0,
+	0x1.000002p+0,
+	false,
+	0x1.00000101b2b29p+0,
+	0x1.00000101b2b2ap+0,
+	0x1.00000101b2b29p+0,
+	0x1.00000101b2b2ap+0,
+	false,
+	0x1.00000101b2b29a46p+0,
+	0x1.00000101b2b29a46p+0,
+	0x1.00000101b2b29a46p+0,
+	0x1.00000101b2b29a48p+0,
+	false,
+	0x1.00000101b2b29a46p+0,
+	0x1.00000101b2b29a46p+0,
+	0x1.00000101b2b29a46p+0,
+	0x1.00000101b2b29a48p+0,
+	false,
+	0x1.00000101b2b29a4692b67b7ca3p+0,
+	0x1.00000101b2b29a4692b67b7ca3p+0,
+	0x1.00000101b2b29a4692b67b7ca3p+0,
+	0x1.00000101b2b29a4692b67b7ca38p+0,
+	false,
+	0x1.00000101b2b29a4692b67b7ca313p+0,
+	0x1.00000101b2b29a4692b67b7ca314p+0,
+	0x1.00000101b2b29a4692b67b7ca313p+0,
+	0x1.00000101b2b29a4692b67b7ca314p+0),
+  TEST ("1.00000006",
+	false,
+	0x1p+0,
+	0x1.000002p+0,
+	0x1p+0,
+	0x1.000002p+0,
+	false,
+	0x1.00000101b2b29p+0,
+	0x1.00000101b2b2ap+0,
+	0x1.00000101b2b29p+0,
+	0x1.00000101b2b2ap+0,
+	false,
+	0x1.00000101b2b29a46p+0,
+	0x1.00000101b2b29a46p+0,
+	0x1.00000101b2b29a46p+0,
+	0x1.00000101b2b29a48p+0,
+	false,
+	0x1.00000101b2b29a46p+0,
+	0x1.00000101b2b29a46p+0,
+	0x1.00000101b2b29a46p+0,
+	0x1.00000101b2b29a48p+0,
+	false,
+	0x1.00000101b2b29a4692b67b7ca3p+0,
+	0x1.00000101b2b29a4692b67b7ca3p+0,
+	0x1.00000101b2b29a4692b67b7ca3p+0,
+	0x1.00000101b2b29a4692b67b7ca38p+0,
+	false,
+	0x1.00000101b2b29a4692b67b7ca313p+0,
+	0x1.00000101b2b29a4692b67b7ca314p+0,
+	0x1.00000101b2b29a4692b67b7ca313p+0,
+	0x1.00000101b2b29a4692b67b7ca314p+0),
+  TEST ("1.0000001",
+	false,
+	0x1p+0,
+	0x1.000002p+0,
+	0x1p+0,
+	0x1.000002p+0,
+	false,
+	0x1.000001ad7f29ap+0,
+	0x1.000001ad7f29bp+0,
+	0x1.000001ad7f29ap+0,
+	0x1.000001ad7f29bp+0,
+	false,
+	0x1.000001ad7f29abcap+0,
+	0x1.000001ad7f29abcap+0,
+	0x1.000001ad7f29abcap+0,
+	0x1.000001ad7f29abccp+0,
+	false,
+	0x1.000001ad7f29abcap+0,
+	0x1.000001ad7f29abcap+0,
+	0x1.000001ad7f29abcap+0,
+	0x1.000001ad7f29abccp+0,
+	false,
+	0x1.000001ad7f29abcaf485787a65p+0,
+	0x1.000001ad7f29abcaf485787a65p+0,
+	0x1.000001ad7f29abcaf485787a65p+0,
+	0x1.000001ad7f29abcaf485787a658p+0,
+	false,
+	0x1.000001ad7f29abcaf485787a652p+0,
+	0x1.000001ad7f29abcaf485787a6521p+0,
+	0x1.000001ad7f29abcaf485787a652p+0,
+	0x1.000001ad7f29abcaf485787a6521p+0),
+  TEST ("1.000000",
+	true,
+	0x1p+0,
+	0x1p+0,
+	0x1p+0,
+	0x1p+0,
+	true,
+	0x1p+0,
+	0x1p+0,
+	0x1p+0,
+	0x1p+0,
+	true,
+	0x1p+0,
+	0x1p+0,
+	0x1p+0,
+	0x1p+0,
+	true,
+	0x1p+0,
+	0x1p+0,
+	0x1p+0,
+	0x1p+0,
+	true,
+	0x1p+0,
+	0x1p+0,
+	0x1p+0,
+	0x1p+0,
+	true,
+	0x1p+0,
+	0x1p+0,
+	0x1p+0,
+	0x1p+0),
+  TEST ("1.00000000000000011113",
+	false,
+	0x1p+0,
+	0x1p+0,
+	0x1p+0,
+	0x1.000002p+0,
+	false,
+	0x1p+0,
+	0x1.0000000000001p+0,
+	0x1p+0,
+	0x1.0000000000001p+0,
+	false,
+	0x1.00000000000008p+0,
+	0x1.0000000000000802p+0,
+	0x1.00000000000008p+0,
+	0x1.0000000000000802p+0,
+	false,
+	0x1.00000000000008p+0,
+	0x1.0000000000000802p+0,
+	0x1.00000000000008p+0,
+	0x1.0000000000000802p+0,
+	false,
+	0x1.0000000000000801fc96557232p+0,
+	0x1.0000000000000801fc96557232p+0,
+	0x1.0000000000000801fc96557232p+0,
+	0x1.0000000000000801fc965572328p+0,
+	false,
+	0x1.0000000000000801fc9655723222p+0,
+	0x1.0000000000000801fc9655723222p+0,
+	0x1.0000000000000801fc9655723222p+0,
+	0x1.0000000000000801fc9655723223p+0),
+  TEST ("1.00000000000000011103",
+	false,
+	0x1p+0,
+	0x1p+0,
+	0x1p+0,
+	0x1.000002p+0,
+	false,
+	0x1p+0,
+	0x1.0000000000001p+0,
+	0x1p+0,
+	0x1.0000000000001p+0,
+	false,
+	0x1.00000000000008p+0,
+	0x1.00000000000008p+0,
+	0x1.00000000000008p+0,
+	0x1.0000000000000802p+0,
+	false,
+	0x1.00000000000008p+0,
+	0x1.00000000000008p+0,
+	0x1.00000000000008p+0,
+	0x1.0000000000000802p+0,
+	false,
+	0x1.00000000000008002459c076c48p+0,
+	0x1.00000000000008002459c076c5p+0,
+	0x1.00000000000008002459c076c48p+0,
+	0x1.00000000000008002459c076c5p+0,
+	false,
+	0x1.00000000000008002459c076c4f7p+0,
+	0x1.00000000000008002459c076c4f8p+0,
+	0x1.00000000000008002459c076c4f7p+0,
+	0x1.00000000000008002459c076c4f8p+0),
+  TEST ("1.00000000000000011102",
+	false,
+	0x1p+0,
+	0x1p+0,
+	0x1p+0,
+	0x1.000002p+0,
+	false,
+	0x1p+0,
+	0x1p+0,
+	0x1p+0,
+	0x1.0000000000001p+0,
+	false,
+	0x1.00000000000007fep+0,
+	0x1.00000000000008p+0,
+	0x1.00000000000007fep+0,
+	0x1.00000000000008p+0,
+	false,
+	0x1.00000000000007fep+0,
+	0x1.00000000000008p+0,
+	0x1.00000000000007fep+0,
+	0x1.00000000000008p+0,
+	false,
+	0x1.00000000000007fff5207e5dap+0,
+	0x1.00000000000007fff5207e5da08p+0,
+	0x1.00000000000007fff5207e5dap+0,
+	0x1.00000000000007fff5207e5da08p+0,
+	false,
+	0x1.00000000000007fff5207e5da073p+0,
+	0x1.00000000000007fff5207e5da073p+0,
+	0x1.00000000000007fff5207e5da073p+0,
+	0x1.00000000000007fff5207e5da074p+0),
+  TEST ("1.00000000000000011101",
+	false,
+	0x1p+0,
+	0x1p+0,
+	0x1p+0,
+	0x1.000002p+0,
+	false,
+	0x1p+0,
+	0x1p+0,
+	0x1p+0,
+	0x1.0000000000001p+0,
+	false,
+	0x1.00000000000007fep+0,
+	0x1.00000000000008p+0,
+	0x1.00000000000007fep+0,
+	0x1.00000000000008p+0,
+	false,
+	0x1.00000000000007fep+0,
+	0x1.00000000000008p+0,
+	0x1.00000000000007fep+0,
+	0x1.00000000000008p+0,
+	false,
+	0x1.00000000000007ffc5e73c447b8p+0,
+	0x1.00000000000007ffc5e73c447cp+0,
+	0x1.00000000000007ffc5e73c447b8p+0,
+	0x1.00000000000007ffc5e73c447cp+0,
+	false,
+	0x1.00000000000007ffc5e73c447befp+0,
+	0x1.00000000000007ffc5e73c447befp+0,
+	0x1.00000000000007ffc5e73c447befp+0,
+	0x1.00000000000007ffc5e73c447bfp+0),
+  TEST ("1.0000000000000001111",
+	false,
+	0x1p+0,
+	0x1p+0,
+	0x1p+0,
+	0x1.000002p+0,
+	false,
+	0x1p+0,
+	0x1.0000000000001p+0,
+	0x1p+0,
+	0x1.0000000000001p+0,
+	false,
+	0x1.00000000000008p+0,
+	0x1.0000000000000802p+0,
+	0x1.00000000000008p+0,
+	0x1.0000000000000802p+0,
+	false,
+	0x1.00000000000008p+0,
+	0x1.0000000000000802p+0,
+	0x1.00000000000008p+0,
+	0x1.0000000000000802p+0,
+	false,
+	0x1.00000000000008016eea8f26c48p+0,
+	0x1.00000000000008016eea8f26c48p+0,
+	0x1.00000000000008016eea8f26c48p+0,
+	0x1.00000000000008016eea8f26c5p+0,
+	false,
+	0x1.00000000000008016eea8f26c495p+0,
+	0x1.00000000000008016eea8f26c496p+0,
+	0x1.00000000000008016eea8f26c495p+0,
+	0x1.00000000000008016eea8f26c496p+0),
+  TEST ("1.000000000000000111",
+	false,
+	0x1p+0,
+	0x1p+0,
+	0x1p+0,
+	0x1.000002p+0,
+	false,
+	0x1p+0,
+	0x1p+0,
+	0x1p+0,
+	0x1.0000000000001p+0,
+	false,
+	0x1.00000000000007fep+0,
+	0x1.00000000000008p+0,
+	0x1.00000000000007fep+0,
+	0x1.00000000000008p+0,
+	false,
+	0x1.00000000000007fep+0,
+	0x1.00000000000008p+0,
+	0x1.00000000000007fep+0,
+	0x1.00000000000008p+0,
+	false,
+	0x1.00000000000007ff96adfa2b57p+0,
+	0x1.00000000000007ff96adfa2b578p+0,
+	0x1.00000000000007ff96adfa2b57p+0,
+	0x1.00000000000007ff96adfa2b578p+0,
+	false,
+	0x1.00000000000007ff96adfa2b576ap+0,
+	0x1.00000000000007ff96adfa2b576bp+0,
+	0x1.00000000000007ff96adfa2b576ap+0,
+	0x1.00000000000007ff96adfa2b576bp+0),
+  TEST ("1.00000000000000011",
+	false,
+	0x1p+0,
+	0x1p+0,
+	0x1p+0,
+	0x1.000002p+0,
+	false,
+	0x1p+0,
+	0x1p+0,
+	0x1p+0,
+	0x1.0000000000001p+0,
+	false,
+	0x1.00000000000007ecp+0,
+	0x1.00000000000007eep+0,
+	0x1.00000000000007ecp+0,
+	0x1.00000000000007eep+0,
+	false,
+	0x1.00000000000007ecp+0,
+	0x1.00000000000007eep+0,
+	0x1.00000000000007ecp+0,
+	0x1.00000000000007eep+0,
+	false,
+	0x1.00000000000007ed24502859138p+0,
+	0x1.00000000000007ed24502859138p+0,
+	0x1.00000000000007ed24502859138p+0,
+	0x1.00000000000007ed2450285914p+0,
+	false,
+	0x1.00000000000007ed2450285913bfp+0,
+	0x1.00000000000007ed2450285913bfp+0,
+	0x1.00000000000007ed2450285913bfp+0,
+	0x1.00000000000007ed2450285913cp+0),
+  TEST ("1.0000000000000001",
+	false,
+	0x1p+0,
+	0x1p+0,
+	0x1p+0,
+	0x1.000002p+0,
+	false,
+	0x1p+0,
+	0x1p+0,
+	0x1p+0,
+	0x1.0000000000001p+0,
+	false,
+	0x1.0000000000000734p+0,
+	0x1.0000000000000734p+0,
+	0x1.0000000000000734p+0,
+	0x1.0000000000000736p+0,
+	false,
+	0x1.0000000000000734p+0,
+	0x1.0000000000000734p+0,
+	0x1.0000000000000734p+0,
+	0x1.0000000000000736p+0,
+	false,
+	0x1.0000000000000734aca5f6226fp+0,
+	0x1.0000000000000734aca5f6226fp+0,
+	0x1.0000000000000734aca5f6226fp+0,
+	0x1.0000000000000734aca5f6226f8p+0,
+	false,
+	0x1.0000000000000734aca5f6226f0ap+0,
+	0x1.0000000000000734aca5f6226f0bp+0,
+	0x1.0000000000000734aca5f6226f0ap+0,
+	0x1.0000000000000734aca5f6226f0bp+0),
+  TEST ("3929201589819414e-25",
+	false,
+	0x1.b0053p-32,
+	0x1.b00532p-32,
+	0x1.b0053p-32,
+	0x1.b00532p-32,
+	false,
+	0x1.b005314e2421ep-32,
+	0x1.b005314e2421ep-32,
+	0x1.b005314e2421ep-32,
+	0x1.b005314e2421fp-32,
+	false,
+	0x1.b005314e2421e7fep-32,
+	0x1.b005314e2421e8p-32,
+	0x1.b005314e2421e7fep-32,
+	0x1.b005314e2421e8p-32,
+	false,
+	0x1.b005314e2421e7fep-32,
+	0x1.b005314e2421e8p-32,
+	0x1.b005314e2421e7fep-32,
+	0x1.b005314e2421e8p-32,
+	false,
+	0x1.b005314e2421e7ffb472840c5ap-32,
+	0x1.b005314e2421e7ffb472840c5a8p-32,
+	0x1.b005314e2421e7ffb472840c5ap-32,
+	0x1.b005314e2421e7ffb472840c5a8p-32,
+	false,
+	0x1.b005314e2421e7ffb472840c5a6ep-32,
+	0x1.b005314e2421e7ffb472840c5a6fp-32,
+	0x1.b005314e2421e7ffb472840c5a6ep-32,
+	0x1.b005314e2421e7ffb472840c5a6fp-32),
+  TEST ("0.0000000000000000000000000000000000000000000021019476964872"
+	"256063855943749348741969203929128147736576356024258346866240"
+	"28790902229957282543182373046875",
+	false,
+	0x8p-152,
+	0x1p-148,
+	0x8p-152,
+	0x1p-148,
+	true,
+	0xcp-152,
+	0xcp-152,
+	0xcp-152,
+	0xcp-152,
+	true,
+	0xcp-152,
+	0xcp-152,
+	0xcp-152,
+	0xcp-152,
+	true,
+	0xcp-152,
+	0xcp-152,
+	0xcp-152,
+	0xcp-152,
+	true,
+	0xcp-152,
+	0xcp-152,
+	0xcp-152,
+	0xcp-152,
+	true,
+	0xcp-152,
+	0xcp-152,
+	0xcp-152,
+	0xcp-152),
+  TEST ("1.00000005960464477539062499",
+	false,
+	0x1p+0,
+	0x1p+0,
+	0x1p+0,
+	0x1.000002p+0,
+	false,
+	0x1.000000fffffffp+0,
+	0x1.000001p+0,
+	0x1.000000fffffffp+0,
+	0x1.000001p+0,
+	false,
+	0x1.000000fffffffffep+0,
+	0x1.000001p+0,
+	0x1.000000fffffffffep+0,
+	0x1.000001p+0,
+	false,
+	0x1.000000fffffffffep+0,
+	0x1.000001p+0,
+	0x1.000000fffffffffep+0,
+	0x1.000001p+0,
+	false,
+	0x1.000000fffffffffffffffce7b78p+0,
+	0x1.000000fffffffffffffffce7b8p+0,
+	0x1.000000fffffffffffffffce7b78p+0,
+	0x1.000000fffffffffffffffce7b8p+0,
+	false,
+	0x1.000000fffffffffffffffce7b7e7p+0,
+	0x1.000000fffffffffffffffce7b7e7p+0,
+	0x1.000000fffffffffffffffce7b7e7p+0,
+	0x1.000000fffffffffffffffce7b7e8p+0),
+  TEST ("1.000000059604644775390625",
+	false,
+	0x1p+0,
+	0x1p+0,
+	0x1p+0,
+	0x1.000002p+0,
+	true,
+	0x1.000001p+0,
+	0x1.000001p+0,
+	0x1.000001p+0,
+	0x1.000001p+0,
+	true,
+	0x1.000001p+0,
+	0x1.000001p+0,
+	0x1.000001p+0,
+	0x1.000001p+0,
+	true,
+	0x1.000001p+0,
+	0x1.000001p+0,
+	0x1.000001p+0,
+	0x1.000001p+0,
+	true,
+	0x1.000001p+0,
+	0x1.000001p+0,
+	0x1.000001p+0,
+	0x1.000001p+0,
+	true,
+	0x1.000001p+0,
+	0x1.000001p+0,
+	0x1.000001p+0,
+	0x1.000001p+0),
+  TEST ("1.00000005960464477539062501",
+	false,
+	0x1p+0,
+	0x1.000002p+0,
+	0x1p+0,
+	0x1.000002p+0,
+	false,
+	0x1.000001p+0,
+	0x1.000001p+0,
+	0x1.000001p+0,
+	0x1.0000010000001p+0,
+	false,
+	0x1.000001p+0,
+	0x1.000001p+0,
+	0x1.000001p+0,
+	0x1.0000010000000002p+0,
+	false,
+	0x1.000001p+0,
+	0x1.000001p+0,
+	0x1.000001p+0,
+	0x1.0000010000000002p+0,
+	false,
+	0x1.00000100000000000000031848p+0,
+	0x1.00000100000000000000031848p+0,
+	0x1.00000100000000000000031848p+0,
+	0x1.000001000000000000000318488p+0,
+	false,
+	0x1.0000010000000000000003184818p+0,
+	0x1.0000010000000000000003184819p+0,
+	0x1.0000010000000000000003184818p+0,
+	0x1.0000010000000000000003184819p+0),
+  TEST ("1.00000011920928955078125",
+	true,
+	0x1.000002p+0,
+	0x1.000002p+0,
+	0x1.000002p+0,
+	0x1.000002p+0,
+	true,
+	0x1.000002p+0,
+	0x1.000002p+0,
+	0x1.000002p+0,
+	0x1.000002p+0,
+	true,
+	0x1.000002p+0,
+	0x1.000002p+0,
+	0x1.000002p+0,
+	0x1.000002p+0,
+	true,
+	0x1.000002p+0,
+	0x1.000002p+0,
+	0x1.000002p+0,
+	0x1.000002p+0,
+	true,
+	0x1.000002p+0,
+	0x1.000002p+0,
+	0x1.000002p+0,
+	0x1.000002p+0,
+	true,
+	0x1.000002p+0,
+	0x1.000002p+0,
+	0x1.000002p+0,
+	0x1.000002p+0),
+  TEST ("1.00000017881393432617187499",
+	false,
+	0x1.000002p+0,
+	0x1.000002p+0,
+	0x1.000002p+0,
+	0x1.000004p+0,
+	false,
+	0x1.000002fffffffp+0,
+	0x1.000003p+0,
+	0x1.000002fffffffp+0,
+	0x1.000003p+0,
+	false,
+	0x1.000002fffffffffep+0,
+	0x1.000003p+0,
+	0x1.000002fffffffffep+0,
+	0x1.000003p+0,
+	false,
+	0x1.000002fffffffffep+0,
+	0x1.000003p+0,
+	0x1.000002fffffffffep+0,
+	0x1.000003p+0,
+	false,
+	0x1.000002fffffffffffffffce7b78p+0,
+	0x1.000002fffffffffffffffce7b8p+0,
+	0x1.000002fffffffffffffffce7b78p+0,
+	0x1.000002fffffffffffffffce7b8p+0,
+	false,
+	0x1.000002fffffffffffffffce7b7e7p+0,
+	0x1.000002fffffffffffffffce7b7e7p+0,
+	0x1.000002fffffffffffffffce7b7e7p+0,
+	0x1.000002fffffffffffffffce7b7e8p+0),
+  TEST ("1.000000178813934326171875",
+	false,
+	0x1.000002p+0,
+	0x1.000004p+0,
+	0x1.000002p+0,
+	0x1.000004p+0,
+	true,
+	0x1.000003p+0,
+	0x1.000003p+0,
+	0x1.000003p+0,
+	0x1.000003p+0,
+	true,
+	0x1.000003p+0,
+	0x1.000003p+0,
+	0x1.000003p+0,
+	0x1.000003p+0,
+	true,
+	0x1.000003p+0,
+	0x1.000003p+0,
+	0x1.000003p+0,
+	0x1.000003p+0,
+	true,
+	0x1.000003p+0,
+	0x1.000003p+0,
+	0x1.000003p+0,
+	0x1.000003p+0,
+	true,
+	0x1.000003p+0,
+	0x1.000003p+0,
+	0x1.000003p+0,
+	0x1.000003p+0),
+  TEST ("1.00000017881393432617187501",
+	false,
+	0x1.000002p+0,
+	0x1.000004p+0,
+	0x1.000002p+0,
+	0x1.000004p+0,
+	false,
+	0x1.000003p+0,
+	0x1.000003p+0,
+	0x1.000003p+0,
+	0x1.0000030000001p+0,
+	false,
+	0x1.000003p+0,
+	0x1.000003p+0,
+	0x1.000003p+0,
+	0x1.0000030000000002p+0,
+	false,
+	0x1.000003p+0,
+	0x1.000003p+0,
+	0x1.000003p+0,
+	0x1.0000030000000002p+0,
+	false,
+	0x1.00000300000000000000031848p+0,
+	0x1.00000300000000000000031848p+0,
+	0x1.00000300000000000000031848p+0,
+	0x1.000003000000000000000318488p+0,
+	false,
+	0x1.0000030000000000000003184818p+0,
+	0x1.0000030000000000000003184819p+0,
+	0x1.0000030000000000000003184818p+0,
+	0x1.0000030000000000000003184819p+0),
+  TEST ("1.0000002384185791015625",
+	true,
+	0x1.000004p+0,
+	0x1.000004p+0,
+	0x1.000004p+0,
+	0x1.000004p+0,
+	true,
+	0x1.000004p+0,
+	0x1.000004p+0,
+	0x1.000004p+0,
+	0x1.000004p+0,
+	true,
+	0x1.000004p+0,
+	0x1.000004p+0,
+	0x1.000004p+0,
+	0x1.000004p+0,
+	true,
+	0x1.000004p+0,
+	0x1.000004p+0,
+	0x1.000004p+0,
+	0x1.000004p+0,
+	true,
+	0x1.000004p+0,
+	0x1.000004p+0,
+	0x1.000004p+0,
+	0x1.000004p+0,
+	true,
+	0x1.000004p+0,
+	0x1.000004p+0,
+	0x1.000004p+0,
+	0x1.000004p+0),
+  TEST ("1.08420217248550443400745280086994171142578125e-19",
+	true,
+	0x2p-64,
+	0x2p-64,
+	0x2p-64,
+	0x2p-64,
+	true,
+	0x2p-64,
+	0x2p-64,
+	0x2p-64,
+	0x2p-64,
+	true,
+	0x2p-64,
+	0x2p-64,
+	0x2p-64,
+	0x2p-64,
+	true,
+	0x2p-64,
+	0x2p-64,
+	0x2p-64,
+	0x2p-64,
+	true,
+	0x2p-64,
+	0x2p-64,
+	0x2p-64,
+	0x2p-64,
+	true,
+	0x2p-64,
+	0x2p-64,
+	0x2p-64,
+	0x2p-64),
+  TEST ("1.0842022371089897897127399001987457793916291848290711641311"
+	"645507812499e-19",
+	false,
+	0x2p-64,
+	0x2p-64,
+	0x2p-64,
+	0x2.000004p-64,
+	false,
+	0x2.000001ffffffep-64,
+	0x2.000002p-64,
+	0x2.000001ffffffep-64,
+	0x2.000002p-64,
+	false,
+	0x2.000001fffffffffcp-64,
+	0x2.000002p-64,
+	0x2.000001fffffffffcp-64,
+	0x2.000002p-64,
+	false,
+	0x2.000001fffffffffcp-64,
+	0x2.000002p-64,
+	0x2.000001fffffffffcp-64,
+	0x2.000002p-64,
+	false,
+	0x2.000001ffffffffffffffffffffp-64,
+	0x2.000002p-64,
+	0x2.000001ffffffffffffffffffffp-64,
+	0x2.000002p-64,
+	false,
+	0x2.000001fffffffffffffffffffffep-64,
+	0x2.000002p-64,
+	0x2.000001fffffffffffffffffffffep-64,
+	0x2.000002p-64),
+  TEST ("1.0842022371089897897127399001987457793916291848290711641311"
+	"6455078125e-19",
+	false,
+	0x2p-64,
+	0x2p-64,
+	0x2p-64,
+	0x2.000004p-64,
+	true,
+	0x2.000002p-64,
+	0x2.000002p-64,
+	0x2.000002p-64,
+	0x2.000002p-64,
+	true,
+	0x2.000002p-64,
+	0x2.000002p-64,
+	0x2.000002p-64,
+	0x2.000002p-64,
+	true,
+	0x2.000002p-64,
+	0x2.000002p-64,
+	0x2.000002p-64,
+	0x2.000002p-64,
+	true,
+	0x2.000002p-64,
+	0x2.000002p-64,
+	0x2.000002p-64,
+	0x2.000002p-64,
+	true,
+	0x2.000002p-64,
+	0x2.000002p-64,
+	0x2.000002p-64,
+	0x2.000002p-64),
+  TEST ("1.0842022371089897897127399001987457793916291848290711641311"
+	"645507812501e-19",
+	false,
+	0x2p-64,
+	0x2.000004p-64,
+	0x2p-64,
+	0x2.000004p-64,
+	false,
+	0x2.000002p-64,
+	0x2.000002p-64,
+	0x2.000002p-64,
+	0x2.0000020000002p-64,
+	false,
+	0x2.000002p-64,
+	0x2.000002p-64,
+	0x2.000002p-64,
+	0x2.0000020000000004p-64,
+	false,
+	0x2.000002p-64,
+	0x2.000002p-64,
+	0x2.000002p-64,
+	0x2.0000020000000004p-64,
+	false,
+	0x2.000002p-64,
+	0x2.000002p-64,
+	0x2.000002p-64,
+	0x2.00000200000000000000000001p-64,
+	false,
+	0x2.000002p-64,
+	0x2.000002p-64,
+	0x2.000002p-64,
+	0x2.0000020000000000000000000002p-64),
+  TEST ("1.0842023017324751454180269995275498473574771196581423282623"
+	"291015625e-19",
+	true,
+	0x2.000004p-64,
+	0x2.000004p-64,
+	0x2.000004p-64,
+	0x2.000004p-64,
+	true,
+	0x2.000004p-64,
+	0x2.000004p-64,
+	0x2.000004p-64,
+	0x2.000004p-64,
+	true,
+	0x2.000004p-64,
+	0x2.000004p-64,
+	0x2.000004p-64,
+	0x2.000004p-64,
+	true,
+	0x2.000004p-64,
+	0x2.000004p-64,
+	0x2.000004p-64,
+	0x2.000004p-64,
+	true,
+	0x2.000004p-64,
+	0x2.000004p-64,
+	0x2.000004p-64,
+	0x2.000004p-64,
+	true,
+	0x2.000004p-64,
+	0x2.000004p-64,
+	0x2.000004p-64,
+	0x2.000004p-64),
+  TEST ("1.0842023663559605011233140988563539153233250544872134923934"
+	"936523437499e-19",
+	false,
+	0x2.000004p-64,
+	0x2.000004p-64,
+	0x2.000004p-64,
+	0x2.000008p-64,
+	false,
+	0x2.000005ffffffep-64,
+	0x2.000006p-64,
+	0x2.000005ffffffep-64,
+	0x2.000006p-64,
+	false,
+	0x2.000005fffffffffcp-64,
+	0x2.000006p-64,
+	0x2.000005fffffffffcp-64,
+	0x2.000006p-64,
+	false,
+	0x2.000005fffffffffcp-64,
+	0x2.000006p-64,
+	0x2.000005fffffffffcp-64,
+	0x2.000006p-64,
+	false,
+	0x2.000005ffffffffffffffffffffp-64,
+	0x2.000006p-64,
+	0x2.000005ffffffffffffffffffffp-64,
+	0x2.000006p-64,
+	false,
+	0x2.000005fffffffffffffffffffffep-64,
+	0x2.000006p-64,
+	0x2.000005fffffffffffffffffffffep-64,
+	0x2.000006p-64),
+  TEST ("1.0842023663559605011233140988563539153233250544872134923934"
+	"9365234375e-19",
+	false,
+	0x2.000004p-64,
+	0x2.000008p-64,
+	0x2.000004p-64,
+	0x2.000008p-64,
+	true,
+	0x2.000006p-64,
+	0x2.000006p-64,
+	0x2.000006p-64,
+	0x2.000006p-64,
+	true,
+	0x2.000006p-64,
+	0x2.000006p-64,
+	0x2.000006p-64,
+	0x2.000006p-64,
+	true,
+	0x2.000006p-64,
+	0x2.000006p-64,
+	0x2.000006p-64,
+	0x2.000006p-64,
+	true,
+	0x2.000006p-64,
+	0x2.000006p-64,
+	0x2.000006p-64,
+	0x2.000006p-64,
+	true,
+	0x2.000006p-64,
+	0x2.000006p-64,
+	0x2.000006p-64,
+	0x2.000006p-64),
+  TEST ("1.0842023663559605011233140988563539153233250544872134923934"
+	"936523437501e-19",
+	false,
+	0x2.000004p-64,
+	0x2.000008p-64,
+	0x2.000004p-64,
+	0x2.000008p-64,
+	false,
+	0x2.000006p-64,
+	0x2.000006p-64,
+	0x2.000006p-64,
+	0x2.0000060000002p-64,
+	false,
+	0x2.000006p-64,
+	0x2.000006p-64,
+	0x2.000006p-64,
+	0x2.0000060000000004p-64,
+	false,
+	0x2.000006p-64,
+	0x2.000006p-64,
+	0x2.000006p-64,
+	0x2.0000060000000004p-64,
+	false,
+	0x2.000006p-64,
+	0x2.000006p-64,
+	0x2.000006p-64,
+	0x2.00000600000000000000000001p-64,
+	false,
+	0x2.000006p-64,
+	0x2.000006p-64,
+	0x2.000006p-64,
+	0x2.0000060000000000000000000002p-64),
+  TEST ("1.0842024309794458568286011981851579832891729893162846565246"
+	"58203125e-19",
+	true,
+	0x2.000008p-64,
+	0x2.000008p-64,
+	0x2.000008p-64,
+	0x2.000008p-64,
+	true,
+	0x2.000008p-64,
+	0x2.000008p-64,
+	0x2.000008p-64,
+	0x2.000008p-64,
+	true,
+	0x2.000008p-64,
+	0x2.000008p-64,
+	0x2.000008p-64,
+	0x2.000008p-64,
+	true,
+	0x2.000008p-64,
+	0x2.000008p-64,
+	0x2.000008p-64,
+	0x2.000008p-64,
+	true,
+	0x2.000008p-64,
+	0x2.000008p-64,
+	0x2.000008p-64,
+	0x2.000008p-64,
+	true,
+	0x2.000008p-64,
+	0x2.000008p-64,
+	0x2.000008p-64,
+	0x2.000008p-64),
+  TEST ("7.5231638452626400509999138382223723380394595633413601376560"
+	"1092018187046051025390625e-37",
+	true,
+	0x1p-120,
+	0x1p-120,
+	0x1p-120,
+	0x1p-120,
+	true,
+	0x1p-120,
+	0x1p-120,
+	0x1p-120,
+	0x1p-120,
+	true,
+	0x1p-120,
+	0x1p-120,
+	0x1p-120,
+	0x1p-120,
+	true,
+	0x1p-120,
+	0x1p-120,
+	0x1p-120,
+	0x1p-120,
+	true,
+	0x1p-120,
+	0x1p-120,
+	0x1p-120,
+	0x1p-120,
+	true,
+	0x1p-120,
+	0x1p-120,
+	0x1p-120,
+	0x1p-120),
+  TEST ("7.5231642936781486349413765338158389908126215730251815381410"
+	"578824437213052434003657253924757242202758789062499e-37",
+	false,
+	0x1p-120,
+	0x1p-120,
+	0x1p-120,
+	0x1.000002p-120,
+	false,
+	0x1.000000fffffffp-120,
+	0x1.000001p-120,
+	0x1.000000fffffffp-120,
+	0x1.000001p-120,
+	false,
+	0x1.000000fffffffffep-120,
+	0x1.000001p-120,
+	0x1.000000fffffffffep-120,
+	0x1.000001p-120,
+	false,
+	0x1.000000fffffffffep-120,
+	0x1.000001p-120,
+	0x1.000000fffffffffep-120,
+	0x1.000001p-120,
+	false,
+	0x1.000000ffffffffffffffffffff8p-120,
+	0x1.000001p-120,
+	0x1.000000ffffffffffffffffffff8p-120,
+	0x1.000001p-120,
+	false,
+	0x1.000000ffffffffffffffffffffffp-120,
+	0x1.000001p-120,
+	0x1.000000ffffffffffffffffffffffp-120,
+	0x1.000001p-120),
+  TEST ("7.5231642936781486349413765338158389908126215730251815381410"
+	"5788244372130524340036572539247572422027587890625e-37",
+	false,
+	0x1p-120,
+	0x1p-120,
+	0x1p-120,
+	0x1.000002p-120,
+	true,
+	0x1.000001p-120,
+	0x1.000001p-120,
+	0x1.000001p-120,
+	0x1.000001p-120,
+	true,
+	0x1.000001p-120,
+	0x1.000001p-120,
+	0x1.000001p-120,
+	0x1.000001p-120,
+	true,
+	0x1.000001p-120,
+	0x1.000001p-120,
+	0x1.000001p-120,
+	0x1.000001p-120,
+	true,
+	0x1.000001p-120,
+	0x1.000001p-120,
+	0x1.000001p-120,
+	0x1.000001p-120,
+	true,
+	0x1.000001p-120,
+	0x1.000001p-120,
+	0x1.000001p-120,
+	0x1.000001p-120),
+  TEST ("7.5231642936781486349413765338158389908126215730251815381410"
+	"578824437213052434003657253924757242202758789062501e-37",
+	false,
+	0x1p-120,
+	0x1.000002p-120,
+	0x1p-120,
+	0x1.000002p-120,
+	false,
+	0x1.000001p-120,
+	0x1.000001p-120,
+	0x1.000001p-120,
+	0x1.0000010000001p-120,
+	false,
+	0x1.000001p-120,
+	0x1.000001p-120,
+	0x1.000001p-120,
+	0x1.0000010000000002p-120,
+	false,
+	0x1.000001p-120,
+	0x1.000001p-120,
+	0x1.000001p-120,
+	0x1.0000010000000002p-120,
+	false,
+	0x1.000001p-120,
+	0x1.000001p-120,
+	0x1.000001p-120,
+	0x1.000001000000000000000000008p-120,
+	false,
+	0x1.000001p-120,
+	0x1.000001p-120,
+	0x1.000001p-120,
+	0x1.0000010000000000000000000001p-120),
+  TEST ("7.5231647420936572188828392294093056435857835827090029386261"
+	"048447055721499765468252007849514484405517578125e-37",
+	true,
+	0x1.000002p-120,
+	0x1.000002p-120,
+	0x1.000002p-120,
+	0x1.000002p-120,
+	true,
+	0x1.000002p-120,
+	0x1.000002p-120,
+	0x1.000002p-120,
+	0x1.000002p-120,
+	true,
+	0x1.000002p-120,
+	0x1.000002p-120,
+	0x1.000002p-120,
+	0x1.000002p-120,
+	true,
+	0x1.000002p-120,
+	0x1.000002p-120,
+	0x1.000002p-120,
+	0x1.000002p-120,
+	true,
+	0x1.000002p-120,
+	0x1.000002p-120,
+	0x1.000002p-120,
+	0x1.000002p-120,
+	true,
+	0x1.000002p-120,
+	0x1.000002p-120,
+	0x1.000002p-120,
+	0x1.000002p-120),
+  TEST ("7.5231651905091658028243019250027722963589455923928243391111"
+	"518069674229947096932846761774271726608276367187499e-37",
+	false,
+	0x1.000002p-120,
+	0x1.000002p-120,
+	0x1.000002p-120,
+	0x1.000004p-120,
+	false,
+	0x1.000002fffffffp-120,
+	0x1.000003p-120,
+	0x1.000002fffffffp-120,
+	0x1.000003p-120,
+	false,
+	0x1.000002fffffffffep-120,
+	0x1.000003p-120,
+	0x1.000002fffffffffep-120,
+	0x1.000003p-120,
+	false,
+	0x1.000002fffffffffep-120,
+	0x1.000003p-120,
+	0x1.000002fffffffffep-120,
+	0x1.000003p-120,
+	false,
+	0x1.000002ffffffffffffffffffff8p-120,
+	0x1.000003p-120,
+	0x1.000002ffffffffffffffffffff8p-120,
+	0x1.000003p-120,
+	false,
+	0x1.000002ffffffffffffffffffffffp-120,
+	0x1.000003p-120,
+	0x1.000002ffffffffffffffffffffffp-120,
+	0x1.000003p-120),
+  TEST ("7.5231651905091658028243019250027722963589455923928243391111"
+	"5180696742299470969328467617742717266082763671875e-37",
+	false,
+	0x1.000002p-120,
+	0x1.000004p-120,
+	0x1.000002p-120,
+	0x1.000004p-120,
+	true,
+	0x1.000003p-120,
+	0x1.000003p-120,
+	0x1.000003p-120,
+	0x1.000003p-120,
+	true,
+	0x1.000003p-120,
+	0x1.000003p-120,
+	0x1.000003p-120,
+	0x1.000003p-120,
+	true,
+	0x1.000003p-120,
+	0x1.000003p-120,
+	0x1.000003p-120,
+	0x1.000003p-120,
+	true,
+	0x1.000003p-120,
+	0x1.000003p-120,
+	0x1.000003p-120,
+	0x1.000003p-120,
+	true,
+	0x1.000003p-120,
+	0x1.000003p-120,
+	0x1.000003p-120,
+	0x1.000003p-120),
+  TEST ("7.5231651905091658028243019250027722963589455923928243391111"
+	"518069674229947096932846761774271726608276367187501e-37",
+	false,
+	0x1.000002p-120,
+	0x1.000004p-120,
+	0x1.000002p-120,
+	0x1.000004p-120,
+	false,
+	0x1.000003p-120,
+	0x1.000003p-120,
+	0x1.000003p-120,
+	0x1.0000030000001p-120,
+	false,
+	0x1.000003p-120,
+	0x1.000003p-120,
+	0x1.000003p-120,
+	0x1.0000030000000002p-120,
+	false,
+	0x1.000003p-120,
+	0x1.000003p-120,
+	0x1.000003p-120,
+	0x1.0000030000000002p-120,
+	false,
+	0x1.000003p-120,
+	0x1.000003p-120,
+	0x1.000003p-120,
+	0x1.000003000000000000000000008p-120,
+	false,
+	0x1.000003p-120,
+	0x1.000003p-120,
+	0x1.000003p-120,
+	0x1.0000030000000000000000000001p-120),
+  TEST ("7.5231656389246743867657646205962389491321076020766457395961"
+	"98769229273839442839744151569902896881103515625e-37",
+	true,
+	0x1.000004p-120,
+	0x1.000004p-120,
+	0x1.000004p-120,
+	0x1.000004p-120,
+	true,
+	0x1.000004p-120,
+	0x1.000004p-120,
+	0x1.000004p-120,
+	0x1.000004p-120,
+	true,
+	0x1.000004p-120,
+	0x1.000004p-120,
+	0x1.000004p-120,
+	0x1.000004p-120,
+	true,
+	0x1.000004p-120,
+	0x1.000004p-120,
+	0x1.000004p-120,
+	0x1.000004p-120,
+	true,
+	0x1.000004p-120,
+	0x1.000004p-120,
+	0x1.000004p-120,
+	0x1.000004p-120,
+	true,
+	0x1.000004p-120,
+	0x1.000004p-120,
+	0x1.000004p-120,
+	0x1.000004p-120),
+  TEST ("340282356779733661637539395458142568447.999",
+	false,
+	0xf.fffffp+124,
+	0xf.fffffp+124,
+	0xf.fffffp+124,
+	INF,
+	false,
+	0xf.fffff7ffffff8p+124,
+	0xf.fffff8p+124,
+	0xf.fffff7ffffff8p+124,
+	0xf.fffff8p+124,
+	false,
+	0xf.fffff7fffffffffp+124,
+	0xf.fffff8p+124,
+	0xf.fffff7fffffffffp+124,
+	0xf.fffff8p+124,
+	false,
+	0xf.fffff7fffffffffp+124,
+	0xf.fffff8p+124,
+	0xf.fffff7fffffffffp+124,
+	0xf.fffff8p+124,
+	false,
+	0xf.fffff7fffffffffffffffffffcp+124,
+	0xf.fffff8p+124,
+	0xf.fffff7fffffffffffffffffffcp+124,
+	0xf.fffff8p+124,
+	false,
+	0xf.fffff7fffffffffffffffffffff8p+124,
+	0xf.fffff8p+124,
+	0xf.fffff7fffffffffffffffffffff8p+124,
+	0xf.fffff8p+124),
+  TEST ("340282356779733661637539395458142568448",
+	false,
+	0xf.fffffp+124,
+	INF,
+	0xf.fffffp+124,
+	INF,
+	true,
+	0xf.fffff8p+124,
+	0xf.fffff8p+124,
+	0xf.fffff8p+124,
+	0xf.fffff8p+124,
+	true,
+	0xf.fffff8p+124,
+	0xf.fffff8p+124,
+	0xf.fffff8p+124,
+	0xf.fffff8p+124,
+	true,
+	0xf.fffff8p+124,
+	0xf.fffff8p+124,
+	0xf.fffff8p+124,
+	0xf.fffff8p+124,
+	true,
+	0xf.fffff8p+124,
+	0xf.fffff8p+124,
+	0xf.fffff8p+124,
+	0xf.fffff8p+124,
+	true,
+	0xf.fffff8p+124,
+	0xf.fffff8p+124,
+	0xf.fffff8p+124,
+	0xf.fffff8p+124),
+  TEST ("340282356779733661637539395458142568448.001",
+	false,
+	0xf.fffffp+124,
+	INF,
+	0xf.fffffp+124,
+	INF,
+	false,
+	0xf.fffff8p+124,
+	0xf.fffff8p+124,
+	0xf.fffff8p+124,
+	0xf.fffff80000008p+124,
+	false,
+	0xf.fffff8p+124,
+	0xf.fffff8p+124,
+	0xf.fffff8p+124,
+	0xf.fffff8000000001p+124,
+	false,
+	0xf.fffff8p+124,
+	0xf.fffff8p+124,
+	0xf.fffff8p+124,
+	0xf.fffff8000000001p+124,
+	false,
+	0xf.fffff8p+124,
+	0xf.fffff8p+124,
+	0xf.fffff8p+124,
+	0xf.fffff800000000000000000004p+124,
+	false,
+	0xf.fffff8p+124,
+	0xf.fffff8p+124,
+	0xf.fffff8p+124,
+	0xf.fffff80000000000000000000008p+124),
+  TEST ("-340282356779733661637539395458142568447.999",
+	false,
+	-INF,
+	-0xf.fffffp+124,
+	-0xf.fffffp+124,
+	-0xf.fffffp+124,
+	false,
+	-0xf.fffff8p+124,
+	-0xf.fffff8p+124,
+	-0xf.fffff7ffffff8p+124,
+	-0xf.fffff7ffffff8p+124,
+	false,
+	-0xf.fffff8p+124,
+	-0xf.fffff8p+124,
+	-0xf.fffff7fffffffffp+124,
+	-0xf.fffff7fffffffffp+124,
+	false,
+	-0xf.fffff8p+124,
+	-0xf.fffff8p+124,
+	-0xf.fffff7fffffffffp+124,
+	-0xf.fffff7fffffffffp+124,
+	false,
+	-0xf.fffff8p+124,
+	-0xf.fffff8p+124,
+	-0xf.fffff7fffffffffffffffffffcp+124,
+	-0xf.fffff7fffffffffffffffffffcp+124,
+	false,
+	-0xf.fffff8p+124,
+	-0xf.fffff8p+124,
+	-0xf.fffff7fffffffffffffffffffff8p+124,
+	-0xf.fffff7fffffffffffffffffffff8p+124),
+  TEST ("-340282356779733661637539395458142568448",
+	false,
+	-INF,
+	-INF,
+	-0xf.fffffp+124,
+	-0xf.fffffp+124,
+	true,
+	-0xf.fffff8p+124,
+	-0xf.fffff8p+124,
+	-0xf.fffff8p+124,
+	-0xf.fffff8p+124,
+	true,
+	-0xf.fffff8p+124,
+	-0xf.fffff8p+124,
+	-0xf.fffff8p+124,
+	-0xf.fffff8p+124,
+	true,
+	-0xf.fffff8p+124,
+	-0xf.fffff8p+124,
+	-0xf.fffff8p+124,
+	-0xf.fffff8p+124,
+	true,
+	-0xf.fffff8p+124,
+	-0xf.fffff8p+124,
+	-0xf.fffff8p+124,
+	-0xf.fffff8p+124,
+	true,
+	-0xf.fffff8p+124,
+	-0xf.fffff8p+124,
+	-0xf.fffff8p+124,
+	-0xf.fffff8p+124),
+  TEST ("-340282356779733661637539395458142568448.001",
+	false,
+	-INF,
+	-INF,
+	-0xf.fffffp+124,
+	-0xf.fffffp+124,
+	false,
+	-0xf.fffff80000008p+124,
+	-0xf.fffff8p+124,
+	-0xf.fffff8p+124,
+	-0xf.fffff8p+124,
+	false,
+	-0xf.fffff8000000001p+124,
+	-0xf.fffff8p+124,
+	-0xf.fffff8p+124,
+	-0xf.fffff8p+124,
+	false,
+	-0xf.fffff8000000001p+124,
+	-0xf.fffff8p+124,
+	-0xf.fffff8p+124,
+	-0xf.fffff8p+124,
+	false,
+	-0xf.fffff800000000000000000004p+124,
+	-0xf.fffff8p+124,
+	-0xf.fffff8p+124,
+	-0xf.fffff8p+124,
+	false,
+	-0xf.fffff80000000000000000000008p+124,
+	-0xf.fffff8p+124,
+	-0xf.fffff8p+124,
+	-0xf.fffff8p+124),
+  TEST ("179769313486231580793728971405303415079934132710037826936173"
+	"778980444968292764750946649017977587207096330286416692887910"
+	"946555547851940402630657488671505820681908902000708383676273"
+	"854845817711531764475730270069855571366959622842914819860834"
+	"936475292719074168444365510704342711559699508093042880177904"
+	"174497791.999",
+	false,
+	0xf.fffffp+124,
+	INF,
+	0xf.fffffp+124,
+	INF,
+	false,
+	0xf.ffffffffffff8p+1020,
+	0xf.ffffffffffff8p+1020,
+	0xf.ffffffffffff8p+1020,
+	INF,
+	false,
+	0xf.ffffffffffffbffp+1020,
+	0xf.ffffffffffffcp+1020,
+	0xf.ffffffffffffbffp+1020,
+	0xf.ffffffffffffcp+1020,
+	false,
+	0xf.ffffffffffffbffp+1020,
+	0xf.ffffffffffffcp+1020,
+	0xf.ffffffffffffbffp+1020,
+	0xf.ffffffffffffcp+1020,
+	false,
+	0xf.ffffffffffffbffffffffffffcp+1020,
+	0xf.ffffffffffffcp+1020,
+	0xf.ffffffffffffbffffffffffffcp+1020,
+	0xf.ffffffffffffcp+1020,
+	false,
+	0xf.ffffffffffffbffffffffffffff8p+1020,
+	0xf.ffffffffffffcp+1020,
+	0xf.ffffffffffffbffffffffffffff8p+1020,
+	0xf.ffffffffffffcp+1020),
+  TEST ("179769313486231580793728971405303415079934132710037826936173"
+	"778980444968292764750946649017977587207096330286416692887910"
+	"946555547851940402630657488671505820681908902000708383676273"
+	"854845817711531764475730270069855571366959622842914819860834"
+	"936475292719074168444365510704342711559699508093042880177904"
+	"174497792",
+	false,
+	0xf.fffffp+124,
+	INF,
+	0xf.fffffp+124,
+	INF,
+	false,
+	0xf.ffffffffffff8p+1020,
+	INF,
+	0xf.ffffffffffff8p+1020,
+	INF,
+	true,
+	0xf.ffffffffffffcp+1020,
+	0xf.ffffffffffffcp+1020,
+	0xf.ffffffffffffcp+1020,
+	0xf.ffffffffffffcp+1020,
+	true,
+	0xf.ffffffffffffcp+1020,
+	0xf.ffffffffffffcp+1020,
+	0xf.ffffffffffffcp+1020,
+	0xf.ffffffffffffcp+1020,
+	false,
+	0xf.ffffffffffffcp+1020,
+	0xf.ffffffffffffcp+1020,
+	0xf.ffffffffffffcp+1020,
+	0xf.ffffffffffffcp+1020,
+	true,
+	0xf.ffffffffffffcp+1020,
+	0xf.ffffffffffffcp+1020,
+	0xf.ffffffffffffcp+1020,
+	0xf.ffffffffffffcp+1020),
+  TEST ("179769313486231580793728971405303415079934132710037826936173"
+	"778980444968292764750946649017977587207096330286416692887910"
+	"946555547851940402630657488671505820681908902000708383676273"
+	"854845817711531764475730270069855571366959622842914819860834"
+	"936475292719074168444365510704342711559699508093042880177904"
+	"174497792.001",
+	false,
+	0xf.fffffp+124,
+	INF,
+	0xf.fffffp+124,
+	INF,
+	false,
+	0xf.ffffffffffff8p+1020,
+	INF,
+	0xf.ffffffffffff8p+1020,
+	INF,
+	false,
+	0xf.ffffffffffffcp+1020,
+	0xf.ffffffffffffcp+1020,
+	0xf.ffffffffffffcp+1020,
+	0xf.ffffffffffffc01p+1020,
+	false,
+	0xf.ffffffffffffcp+1020,
+	0xf.ffffffffffffcp+1020,
+	0xf.ffffffffffffcp+1020,
+	0xf.ffffffffffffc01p+1020,
+	false,
+	0xf.ffffffffffffcp+1020,
+	0xf.ffffffffffffcp+1020,
+	0xf.ffffffffffffcp+1020,
+	0xf.ffffffffffffc0000000000004p+1020,
+	false,
+	0xf.ffffffffffffcp+1020,
+	0xf.ffffffffffffcp+1020,
+	0xf.ffffffffffffcp+1020,
+	0xf.ffffffffffffc000000000000008p+1020),
+  TEST ("-17976931348623158079372897140530341507993413271003782693617"
+	"377898044496829276475094664901797758720709633028641669288791"
+	"094655554785194040263065748867150582068190890200070838367627"
+	"385484581771153176447573027006985557136695962284291481986083"
+	"493647529271907416844436551070434271155969950809304288017790"
+	"4174497791.999",
+	false,
+	-INF,
+	-INF,
+	-0xf.fffffp+124,
+	-0xf.fffffp+124,
+	false,
+	-INF,
+	-0xf.ffffffffffff8p+1020,
+	-0xf.ffffffffffff8p+1020,
+	-0xf.ffffffffffff8p+1020,
+	false,
+	-0xf.ffffffffffffcp+1020,
+	-0xf.ffffffffffffcp+1020,
+	-0xf.ffffffffffffbffp+1020,
+	-0xf.ffffffffffffbffp+1020,
+	false,
+	-0xf.ffffffffffffcp+1020,
+	-0xf.ffffffffffffcp+1020,
+	-0xf.ffffffffffffbffp+1020,
+	-0xf.ffffffffffffbffp+1020,
+	false,
+	-0xf.ffffffffffffcp+1020,
+	-0xf.ffffffffffffcp+1020,
+	-0xf.ffffffffffffbffffffffffffcp+1020,
+	-0xf.ffffffffffffbffffffffffffcp+1020,
+	false,
+	-0xf.ffffffffffffcp+1020,
+	-0xf.ffffffffffffcp+1020,
+	-0xf.ffffffffffffbffffffffffffff8p+1020,
+	-0xf.ffffffffffffbffffffffffffff8p+1020),
+  TEST ("-17976931348623158079372897140530341507993413271003782693617"
+	"377898044496829276475094664901797758720709633028641669288791"
+	"094655554785194040263065748867150582068190890200070838367627"
+	"385484581771153176447573027006985557136695962284291481986083"
+	"493647529271907416844436551070434271155969950809304288017790"
+	"4174497792",
+	false,
+	-INF,
+	-INF,
+	-0xf.fffffp+124,
+	-0xf.fffffp+124,
+	false,
+	-INF,
+	-INF,
+	-0xf.ffffffffffff8p+1020,
+	-0xf.ffffffffffff8p+1020,
+	true,
+	-0xf.ffffffffffffcp+1020,
+	-0xf.ffffffffffffcp+1020,
+	-0xf.ffffffffffffcp+1020,
+	-0xf.ffffffffffffcp+1020,
+	true,
+	-0xf.ffffffffffffcp+1020,
+	-0xf.ffffffffffffcp+1020,
+	-0xf.ffffffffffffcp+1020,
+	-0xf.ffffffffffffcp+1020,
+	false,
+	-0xf.ffffffffffffcp+1020,
+	-0xf.ffffffffffffcp+1020,
+	-0xf.ffffffffffffcp+1020,
+	-0xf.ffffffffffffcp+1020,
+	true,
+	-0xf.ffffffffffffcp+1020,
+	-0xf.ffffffffffffcp+1020,
+	-0xf.ffffffffffffcp+1020,
+	-0xf.ffffffffffffcp+1020),
+  TEST ("-17976931348623158079372897140530341507993413271003782693617"
+	"377898044496829276475094664901797758720709633028641669288791"
+	"094655554785194040263065748867150582068190890200070838367627"
+	"385484581771153176447573027006985557136695962284291481986083"
+	"493647529271907416844436551070434271155969950809304288017790"
+	"4174497792.001",
+	false,
+	-INF,
+	-INF,
+	-0xf.fffffp+124,
+	-0xf.fffffp+124,
+	false,
+	-INF,
+	-INF,
+	-0xf.ffffffffffff8p+1020,
+	-0xf.ffffffffffff8p+1020,
+	false,
+	-0xf.ffffffffffffc01p+1020,
+	-0xf.ffffffffffffcp+1020,
+	-0xf.ffffffffffffcp+1020,
+	-0xf.ffffffffffffcp+1020,
+	false,
+	-0xf.ffffffffffffc01p+1020,
+	-0xf.ffffffffffffcp+1020,
+	-0xf.ffffffffffffcp+1020,
+	-0xf.ffffffffffffcp+1020,
+	false,
+	-0xf.ffffffffffffc0000000000004p+1020,
+	-0xf.ffffffffffffcp+1020,
+	-0xf.ffffffffffffcp+1020,
+	-0xf.ffffffffffffcp+1020,
+	false,
+	-0xf.ffffffffffffc000000000000008p+1020,
+	-0xf.ffffffffffffcp+1020,
+	-0xf.ffffffffffffcp+1020,
+	-0xf.ffffffffffffcp+1020),
+  TEST ("118973149535723176505351158982948866796625400469556721895649"
+	"927756249918185172720476044944290457046138433056764616744328"
+	"666255526748948793023632513609765434237723241753648908036202"
+	"958495124648560574092817813661123067421904850038181180520787"
+	"720310726881239888580817051703268776757919551260442611296993"
+	"969730906497042135737359373754818979106457807539652027804156"
+	"491987771033211787185996492320631117543475322122625353433719"
+	"930462950413766867781210335973022293561007134342532563356262"
+	"609267460063335819387905541393759243547993474715549691352074"
+	"891450084783459970660481689991674771307443551458551137274603"
+	"094678907537177579699931235422786658780337099286207273033150"
+	"295133847635735008945346069635452157254692607776538304457707"
+	"598289220004738023060594798392660507455937428888763514661408"
+	"758068906506527143720723156203739676372818578090840614216621"
+	"704787774611256823213431325634056809505691175988424606654072"
+	"823115950827627377808673574181547198668714142143234447550206"
+	"269197545774263993130119778810659043621312707109068433886162"
+	"877222844491518930341896313561238988520360803607534987178305"
+	"043520937299838173444083502027340452162582038296009574808809"
+	"658742434897860755961343752419543802653239216337103370292742"
+	"935497502474626454559729017094560234867236701379230234809843"
+	"263739640909561388493227725171983531003154799850580375254640"
+	"686684370650275318316632539920970969803838872914424760535111"
+	"444864748847573042963569291679400178896696862026500700279826"
+	"635302471702206627303799047632971460017199544567373231610376"
+	"256879987134317934150014443436145710546137924490489525241523"
+	"018271239906743645663976778059895127442517397682525944430951"
+	"907648109952479454685655581652571021331761401038962049122047"
+	"111009185757383743827811254014770944602713378187451095200132"
+	"611700632386420792585207954137064426995712656449343534120120"
+	"770857498813673742586478583964512406030930704197486727636333"
+	"837001863610516286928300891774383071105022919314408502968809"
+	"463848377324668014115592383521324785361676372582468085716775"
+	"183709078048790084022838728361454734650904480489014369184979"
+	"256497738392744524915616501449487520501300124861778269881261"
+	"335544037735715125808986359728419859776521586683035924100574"
+	"850554368935873803132428446524362913648833348768663733118103"
+	"918959060412499201797234385239260504905744357611987327994540"
+	"083286019952793692265006211633524675976369938866409689573287"
+	"599490442761701229217689614343727392339547174221615984024864"
+	"635625680108391566720681134647098412863051374760613506003971"
+	"759070209697293081442875903240426975910170967179075646317814"
+	"394978762382183679266247724762405284284971833355044962214065"
+	"895558105408175131247181971272672247996246595857705695208092"
+	"816044125822560989770526261449460733912621692806952140652061"
+	"911968824328747339453822511902787546522099225623311147726504"
+	"972617425102845212076162056723650625826928778132002074035405"
+	"250631109426611640681070927283430486232053929420514345435713"
+	"131387967949326001734866894273047449417824913738789829732833"
+	"683358900903818016968127085077418070951770702999663693968324"
+	"004781728763310108379440442854174041581191669623267749855519"
+	"774427387794278666183504498843857475877442235608736818515722"
+	"862733587905866015455830953591207040129558473662150426884726"
+	"759522376583586317425575669726781893104752341432891868770513"
+	"406836036136374264038296610854599454591170582569741798904328"
+	"676755131072831974295435585611673171096113833795735888591844"
+	"569864166955969416680807491722688418115891753669917660968752"
+	"228842669182040018336152355940915579955628386232949747891257"
+	"526145783057949776122896048841308261113063674538553146663451"
+	"574384023903569848640351704415703922683108552880537081027404"
+	"397775617608412295293311763789489900990611859125572525530349"
+	"278319943261304784125553748811339225969956465404836696490782"
+	"500903694674135036899321686023782466034636817818347651623601"
+	"663129318574761269352028560641266614840108083315301260274558"
+	"575087296910384815285134460531715154639604115052348665171547"
+	"251609075784863196403541944155425166776423403472211742139313"
+	"210299896884252707306862499895115691675551238140467142819537"
+	"867343414276518703858928008759955391140729958278175965217739"
+	"826511218924463113077693598006228365514899236789515147503266"
+	"616268809617626228164916917150602464494142485507467876173251"
+	"398398846807079309227567538802476335624194115637802439400050"
+	"221934368975949846684026462252790745597563393487879954351820"
+	"652138303761879543933808642920064500206512003954563931569820"
+	"114768348051593629274325149906343853129692245386396887281599"
+	"735312588117968646270517005121997466606469447530616465384255"
+	"826304380842850779833108567141643769616400809617173972138187"
+	"711971431230616321035038259922624655396612597024040812967444"
+	"207673594478417900666764580589685104809363813759667069693701"
+	"069921295791929938093722225050956280798177934138468414654728"
+	"631498256418191041953123619406060363406390776140155709737059"
+	"125898120366007955506160309553860446596202876233728025871625"
+	"578031503869424406179027994752890226443351619365453243328968"
+	"8740976918527.999",
+	false,
+	0xf.fffffp+124,
+	INF,
+	0xf.fffffp+124,
+	INF,
+	false,
+	0xf.ffffffffffff8p+1020,
+	INF,
+	0xf.ffffffffffff8p+1020,
+	INF,
+	false,
+	0xf.fffffffffffffffp+16380,
+	0xf.fffffffffffffffp+16380,
+	0xf.fffffffffffffffp+16380,
+	INF,
+	false,
+	0xf.fffffffffffffffp+16380,
+	0xf.fffffffffffffffp+16380,
+	0xf.fffffffffffffffp+16380,
+	INF,
+	false,
+	0xf.fffffffffffffffffffffffffcp+1020,
+	INF,
+	0xf.fffffffffffffffffffffffffcp+1020,
+	INF,
+	false,
+	0xf.fffffffffffffff7fffffffffff8p+16380,
+	0xf.fffffffffffffff8p+16380,
+	0xf.fffffffffffffff7fffffffffff8p+16380,
+	0xf.fffffffffffffff8p+16380),
+  TEST ("118973149535723176505351158982948866796625400469556721895649"
+	"927756249918185172720476044944290457046138433056764616744328"
+	"666255526748948793023632513609765434237723241753648908036202"
+	"958495124648560574092817813661123067421904850038181180520787"
+	"720310726881239888580817051703268776757919551260442611296993"
+	"969730906497042135737359373754818979106457807539652027804156"
+	"491987771033211787185996492320631117543475322122625353433719"
+	"930462950413766867781210335973022293561007134342532563356262"
+	"609267460063335819387905541393759243547993474715549691352074"
+	"891450084783459970660481689991674771307443551458551137274603"
+	"094678907537177579699931235422786658780337099286207273033150"
+	"295133847635735008945346069635452157254692607776538304457707"
+	"598289220004738023060594798392660507455937428888763514661408"
+	"758068906506527143720723156203739676372818578090840614216621"
+	"704787774611256823213431325634056809505691175988424606654072"
+	"823115950827627377808673574181547198668714142143234447550206"
+	"269197545774263993130119778810659043621312707109068433886162"
+	"877222844491518930341896313561238988520360803607534987178305"
+	"043520937299838173444083502027340452162582038296009574808809"
+	"658742434897860755961343752419543802653239216337103370292742"
+	"935497502474626454559729017094560234867236701379230234809843"
+	"263739640909561388493227725171983531003154799850580375254640"
+	"686684370650275318316632539920970969803838872914424760535111"
+	"444864748847573042963569291679400178896696862026500700279826"
+	"635302471702206627303799047632971460017199544567373231610376"
+	"256879987134317934150014443436145710546137924490489525241523"
+	"018271239906743645663976778059895127442517397682525944430951"
+	"907648109952479454685655581652571021331761401038962049122047"
+	"111009185757383743827811254014770944602713378187451095200132"
+	"611700632386420792585207954137064426995712656449343534120120"
+	"770857498813673742586478583964512406030930704197486727636333"
+	"837001863610516286928300891774383071105022919314408502968809"
+	"463848377324668014115592383521324785361676372582468085716775"
+	"183709078048790084022838728361454734650904480489014369184979"
+	"256497738392744524915616501449487520501300124861778269881261"
+	"335544037735715125808986359728419859776521586683035924100574"
+	"850554368935873803132428446524362913648833348768663733118103"
+	"918959060412499201797234385239260504905744357611987327994540"
+	"083286019952793692265006211633524675976369938866409689573287"
+	"599490442761701229217689614343727392339547174221615984024864"
+	"635625680108391566720681134647098412863051374760613506003971"
+	"759070209697293081442875903240426975910170967179075646317814"
+	"394978762382183679266247724762405284284971833355044962214065"
+	"895558105408175131247181971272672247996246595857705695208092"
+	"816044125822560989770526261449460733912621692806952140652061"
+	"911968824328747339453822511902787546522099225623311147726504"
+	"972617425102845212076162056723650625826928778132002074035405"
+	"250631109426611640681070927283430486232053929420514345435713"
+	"131387967949326001734866894273047449417824913738789829732833"
+	"683358900903818016968127085077418070951770702999663693968324"
+	"004781728763310108379440442854174041581191669623267749855519"
+	"774427387794278666183504498843857475877442235608736818515722"
+	"862733587905866015455830953591207040129558473662150426884726"
+	"759522376583586317425575669726781893104752341432891868770513"
+	"406836036136374264038296610854599454591170582569741798904328"
+	"676755131072831974295435585611673171096113833795735888591844"
+	"569864166955969416680807491722688418115891753669917660968752"
+	"228842669182040018336152355940915579955628386232949747891257"
+	"526145783057949776122896048841308261113063674538553146663451"
+	"574384023903569848640351704415703922683108552880537081027404"
+	"397775617608412295293311763789489900990611859125572525530349"
+	"278319943261304784125553748811339225969956465404836696490782"
+	"500903694674135036899321686023782466034636817818347651623601"
+	"663129318574761269352028560641266614840108083315301260274558"
+	"575087296910384815285134460531715154639604115052348665171547"
+	"251609075784863196403541944155425166776423403472211742139313"
+	"210299896884252707306862499895115691675551238140467142819537"
+	"867343414276518703858928008759955391140729958278175965217739"
+	"826511218924463113077693598006228365514899236789515147503266"
+	"616268809617626228164916917150602464494142485507467876173251"
+	"398398846807079309227567538802476335624194115637802439400050"
+	"221934368975949846684026462252790745597563393487879954351820"
+	"652138303761879543933808642920064500206512003954563931569820"
+	"114768348051593629274325149906343853129692245386396887281599"
+	"735312588117968646270517005121997466606469447530616465384255"
+	"826304380842850779833108567141643769616400809617173972138187"
+	"711971431230616321035038259922624655396612597024040812967444"
+	"207673594478417900666764580589685104809363813759667069693701"
+	"069921295791929938093722225050956280798177934138468414654728"
+	"631498256418191041953123619406060363406390776140155709737059"
+	"125898120366007955506160309553860446596202876233728025871625"
+	"578031503869424406179027994752890226443351619365453243328968"
+	"8740976918528",
+	false,
+	0xf.fffffp+124,
+	INF,
+	0xf.fffffp+124,
+	INF,
+	false,
+	0xf.ffffffffffff8p+1020,
+	INF,
+	0xf.ffffffffffff8p+1020,
+	INF,
+	false,
+	0xf.fffffffffffffffp+16380,
+	INF,
+	0xf.fffffffffffffffp+16380,
+	INF,
+	false,
+	0xf.fffffffffffffffp+16380,
+	INF,
+	0xf.fffffffffffffffp+16380,
+	INF,
+	false,
+	0xf.fffffffffffffffffffffffffcp+1020,
+	INF,
+	0xf.fffffffffffffffffffffffffcp+1020,
+	INF,
+	true,
+	0xf.fffffffffffffff8p+16380,
+	0xf.fffffffffffffff8p+16380,
+	0xf.fffffffffffffff8p+16380,
+	0xf.fffffffffffffff8p+16380),
+  TEST ("118973149535723176505351158982948866796625400469556721895649"
+	"927756249918185172720476044944290457046138433056764616744328"
+	"666255526748948793023632513609765434237723241753648908036202"
+	"958495124648560574092817813661123067421904850038181180520787"
+	"720310726881239888580817051703268776757919551260442611296993"
+	"969730906497042135737359373754818979106457807539652027804156"
+	"491987771033211787185996492320631117543475322122625353433719"
+	"930462950413766867781210335973022293561007134342532563356262"
+	"609267460063335819387905541393759243547993474715549691352074"
+	"891450084783459970660481689991674771307443551458551137274603"
+	"094678907537177579699931235422786658780337099286207273033150"
+	"295133847635735008945346069635452157254692607776538304457707"
+	"598289220004738023060594798392660507455937428888763514661408"
+	"758068906506527143720723156203739676372818578090840614216621"
+	"704787774611256823213431325634056809505691175988424606654072"
+	"823115950827627377808673574181547198668714142143234447550206"
+	"269197545774263993130119778810659043621312707109068433886162"
+	"877222844491518930341896313561238988520360803607534987178305"
+	"043520937299838173444083502027340452162582038296009574808809"
+	"658742434897860755961343752419543802653239216337103370292742"
+	"935497502474626454559729017094560234867236701379230234809843"
+	"263739640909561388493227725171983531003154799850580375254640"
+	"686684370650275318316632539920970969803838872914424760535111"
+	"444864748847573042963569291679400178896696862026500700279826"
+	"635302471702206627303799047632971460017199544567373231610376"
+	"256879987134317934150014443436145710546137924490489525241523"
+	"018271239906743645663976778059895127442517397682525944430951"
+	"907648109952479454685655581652571021331761401038962049122047"
+	"111009185757383743827811254014770944602713378187451095200132"
+	"611700632386420792585207954137064426995712656449343534120120"
+	"770857498813673742586478583964512406030930704197486727636333"
+	"837001863610516286928300891774383071105022919314408502968809"
+	"463848377324668014115592383521324785361676372582468085716775"
+	"183709078048790084022838728361454734650904480489014369184979"
+	"256497738392744524915616501449487520501300124861778269881261"
+	"335544037735715125808986359728419859776521586683035924100574"
+	"850554368935873803132428446524362913648833348768663733118103"
+	"918959060412499201797234385239260504905744357611987327994540"
+	"083286019952793692265006211633524675976369938866409689573287"
+	"599490442761701229217689614343727392339547174221615984024864"
+	"635625680108391566720681134647098412863051374760613506003971"
+	"759070209697293081442875903240426975910170967179075646317814"
+	"394978762382183679266247724762405284284971833355044962214065"
+	"895558105408175131247181971272672247996246595857705695208092"
+	"816044125822560989770526261449460733912621692806952140652061"
+	"911968824328747339453822511902787546522099225623311147726504"
+	"972617425102845212076162056723650625826928778132002074035405"
+	"250631109426611640681070927283430486232053929420514345435713"
+	"131387967949326001734866894273047449417824913738789829732833"
+	"683358900903818016968127085077418070951770702999663693968324"
+	"004781728763310108379440442854174041581191669623267749855519"
+	"774427387794278666183504498843857475877442235608736818515722"
+	"862733587905866015455830953591207040129558473662150426884726"
+	"759522376583586317425575669726781893104752341432891868770513"
+	"406836036136374264038296610854599454591170582569741798904328"
+	"676755131072831974295435585611673171096113833795735888591844"
+	"569864166955969416680807491722688418115891753669917660968752"
+	"228842669182040018336152355940915579955628386232949747891257"
+	"526145783057949776122896048841308261113063674538553146663451"
+	"574384023903569848640351704415703922683108552880537081027404"
+	"397775617608412295293311763789489900990611859125572525530349"
+	"278319943261304784125553748811339225969956465404836696490782"
+	"500903694674135036899321686023782466034636817818347651623601"
+	"663129318574761269352028560641266614840108083315301260274558"
+	"575087296910384815285134460531715154639604115052348665171547"
+	"251609075784863196403541944155425166776423403472211742139313"
+	"210299896884252707306862499895115691675551238140467142819537"
+	"867343414276518703858928008759955391140729958278175965217739"
+	"826511218924463113077693598006228365514899236789515147503266"
+	"616268809617626228164916917150602464494142485507467876173251"
+	"398398846807079309227567538802476335624194115637802439400050"
+	"221934368975949846684026462252790745597563393487879954351820"
+	"652138303761879543933808642920064500206512003954563931569820"
+	"114768348051593629274325149906343853129692245386396887281599"
+	"735312588117968646270517005121997466606469447530616465384255"
+	"826304380842850779833108567141643769616400809617173972138187"
+	"711971431230616321035038259922624655396612597024040812967444"
+	"207673594478417900666764580589685104809363813759667069693701"
+	"069921295791929938093722225050956280798177934138468414654728"
+	"631498256418191041953123619406060363406390776140155709737059"
+	"125898120366007955506160309553860446596202876233728025871625"
+	"578031503869424406179027994752890226443351619365453243328968"
+	"8740976918528.001",
+	false,
+	0xf.fffffp+124,
+	INF,
+	0xf.fffffp+124,
+	INF,
+	false,
+	0xf.ffffffffffff8p+1020,
+	INF,
+	0xf.ffffffffffff8p+1020,
+	INF,
+	false,
+	0xf.fffffffffffffffp+16380,
+	INF,
+	0xf.fffffffffffffffp+16380,
+	INF,
+	false,
+	0xf.fffffffffffffffp+16380,
+	INF,
+	0xf.fffffffffffffffp+16380,
+	INF,
+	false,
+	0xf.fffffffffffffffffffffffffcp+1020,
+	INF,
+	0xf.fffffffffffffffffffffffffcp+1020,
+	INF,
+	false,
+	0xf.fffffffffffffff8p+16380,
+	0xf.fffffffffffffff8p+16380,
+	0xf.fffffffffffffff8p+16380,
+	0xf.fffffffffffffff8000000000008p+16380),
+  TEST ("-11897314953572317650535115898294886679662540046955672189564"
+	"992775624991818517272047604494429045704613843305676461674432"
+	"866625552674894879302363251360976543423772324175364890803620"
+	"295849512464856057409281781366112306742190485003818118052078"
+	"772031072688123988858081705170326877675791955126044261129699"
+	"396973090649704213573735937375481897910645780753965202780415"
+	"649198777103321178718599649232063111754347532212262535343371"
+	"993046295041376686778121033597302229356100713434253256335626"
+	"260926746006333581938790554139375924354799347471554969135207"
+	"489145008478345997066048168999167477130744355145855113727460"
+	"309467890753717757969993123542278665878033709928620727303315"
+	"029513384763573500894534606963545215725469260777653830445770"
+	"759828922000473802306059479839266050745593742888876351466140"
+	"875806890650652714372072315620373967637281857809084061421662"
+	"170478777461125682321343132563405680950569117598842460665407"
+	"282311595082762737780867357418154719866871414214323444755020"
+	"626919754577426399313011977881065904362131270710906843388616"
+	"287722284449151893034189631356123898852036080360753498717830"
+	"504352093729983817344408350202734045216258203829600957480880"
+	"965874243489786075596134375241954380265323921633710337029274"
+	"293549750247462645455972901709456023486723670137923023480984"
+	"326373964090956138849322772517198353100315479985058037525464"
+	"068668437065027531831663253992097096980383887291442476053511"
+	"144486474884757304296356929167940017889669686202650070027982"
+	"663530247170220662730379904763297146001719954456737323161037"
+	"625687998713431793415001444343614571054613792449048952524152"
+	"301827123990674364566397677805989512744251739768252594443095"
+	"190764810995247945468565558165257102133176140103896204912204"
+	"711100918575738374382781125401477094460271337818745109520013"
+	"261170063238642079258520795413706442699571265644934353412012"
+	"077085749881367374258647858396451240603093070419748672763633"
+	"383700186361051628692830089177438307110502291931440850296880"
+	"946384837732466801411559238352132478536167637258246808571677"
+	"518370907804879008402283872836145473465090448048901436918497"
+	"925649773839274452491561650144948752050130012486177826988126"
+	"133554403773571512580898635972841985977652158668303592410057"
+	"485055436893587380313242844652436291364883334876866373311810"
+	"391895906041249920179723438523926050490574435761198732799454"
+	"008328601995279369226500621163352467597636993886640968957328"
+	"759949044276170122921768961434372739233954717422161598402486"
+	"463562568010839156672068113464709841286305137476061350600397"
+	"175907020969729308144287590324042697591017096717907564631781"
+	"439497876238218367926624772476240528428497183335504496221406"
+	"589555810540817513124718197127267224799624659585770569520809"
+	"281604412582256098977052626144946073391262169280695214065206"
+	"191196882432874733945382251190278754652209922562331114772650"
+	"497261742510284521207616205672365062582692877813200207403540"
+	"525063110942661164068107092728343048623205392942051434543571"
+	"313138796794932600173486689427304744941782491373878982973283"
+	"368335890090381801696812708507741807095177070299966369396832"
+	"400478172876331010837944044285417404158119166962326774985551"
+	"977442738779427866618350449884385747587744223560873681851572"
+	"286273358790586601545583095359120704012955847366215042688472"
+	"675952237658358631742557566972678189310475234143289186877051"
+	"340683603613637426403829661085459945459117058256974179890432"
+	"867675513107283197429543558561167317109611383379573588859184"
+	"456986416695596941668080749172268841811589175366991766096875"
+	"222884266918204001833615235594091557995562838623294974789125"
+	"752614578305794977612289604884130826111306367453855314666345"
+	"157438402390356984864035170441570392268310855288053708102740"
+	"439777561760841229529331176378948990099061185912557252553034"
+	"927831994326130478412555374881133922596995646540483669649078"
+	"250090369467413503689932168602378246603463681781834765162360"
+	"166312931857476126935202856064126661484010808331530126027455"
+	"857508729691038481528513446053171515463960411505234866517154"
+	"725160907578486319640354194415542516677642340347221174213931"
+	"321029989688425270730686249989511569167555123814046714281953"
+	"786734341427651870385892800875995539114072995827817596521773"
+	"982651121892446311307769359800622836551489923678951514750326"
+	"661626880961762622816491691715060246449414248550746787617325"
+	"139839884680707930922756753880247633562419411563780243940005"
+	"022193436897594984668402646225279074559756339348787995435182"
+	"065213830376187954393380864292006450020651200395456393156982"
+	"011476834805159362927432514990634385312969224538639688728159"
+	"973531258811796864627051700512199746660646944753061646538425"
+	"582630438084285077983310856714164376961640080961717397213818"
+	"771197143123061632103503825992262465539661259702404081296744"
+	"420767359447841790066676458058968510480936381375966706969370"
+	"106992129579192993809372222505095628079817793413846841465472"
+	"863149825641819104195312361940606036340639077614015570973705"
+	"912589812036600795550616030955386044659620287623372802587162"
+	"557803150386942440617902799475289022644335161936545324332896"
+	"88740976918527.999",
+	false,
+	-INF,
+	-INF,
+	-0xf.fffffp+124,
+	-0xf.fffffp+124,
+	false,
+	-INF,
+	-INF,
+	-0xf.ffffffffffff8p+1020,
+	-0xf.ffffffffffff8p+1020,
+	false,
+	-INF,
+	-0xf.fffffffffffffffp+16380,
+	-0xf.fffffffffffffffp+16380,
+	-0xf.fffffffffffffffp+16380,
+	false,
+	-INF,
+	-0xf.fffffffffffffffp+16380,
+	-0xf.fffffffffffffffp+16380,
+	-0xf.fffffffffffffffp+16380,
+	false,
+	-INF,
+	-INF,
+	-0xf.fffffffffffffffffffffffffcp+1020,
+	-0xf.fffffffffffffffffffffffffcp+1020,
+	false,
+	-0xf.fffffffffffffff8p+16380,
+	-0xf.fffffffffffffff8p+16380,
+	-0xf.fffffffffffffff7fffffffffff8p+16380,
+	-0xf.fffffffffffffff7fffffffffff8p+16380),
+  TEST ("-11897314953572317650535115898294886679662540046955672189564"
+	"992775624991818517272047604494429045704613843305676461674432"
+	"866625552674894879302363251360976543423772324175364890803620"
+	"295849512464856057409281781366112306742190485003818118052078"
+	"772031072688123988858081705170326877675791955126044261129699"
+	"396973090649704213573735937375481897910645780753965202780415"
+	"649198777103321178718599649232063111754347532212262535343371"
+	"993046295041376686778121033597302229356100713434253256335626"
+	"260926746006333581938790554139375924354799347471554969135207"
+	"489145008478345997066048168999167477130744355145855113727460"
+	"309467890753717757969993123542278665878033709928620727303315"
+	"029513384763573500894534606963545215725469260777653830445770"
+	"759828922000473802306059479839266050745593742888876351466140"
+	"875806890650652714372072315620373967637281857809084061421662"
+	"170478777461125682321343132563405680950569117598842460665407"
+	"282311595082762737780867357418154719866871414214323444755020"
+	"626919754577426399313011977881065904362131270710906843388616"
+	"287722284449151893034189631356123898852036080360753498717830"
+	"504352093729983817344408350202734045216258203829600957480880"
+	"965874243489786075596134375241954380265323921633710337029274"
+	"293549750247462645455972901709456023486723670137923023480984"
+	"326373964090956138849322772517198353100315479985058037525464"
+	"068668437065027531831663253992097096980383887291442476053511"
+	"144486474884757304296356929167940017889669686202650070027982"
+	"663530247170220662730379904763297146001719954456737323161037"
+	"625687998713431793415001444343614571054613792449048952524152"
+	"301827123990674364566397677805989512744251739768252594443095"
+	"190764810995247945468565558165257102133176140103896204912204"
+	"711100918575738374382781125401477094460271337818745109520013"
+	"261170063238642079258520795413706442699571265644934353412012"
+	"077085749881367374258647858396451240603093070419748672763633"
+	"383700186361051628692830089177438307110502291931440850296880"
+	"946384837732466801411559238352132478536167637258246808571677"
+	"518370907804879008402283872836145473465090448048901436918497"
+	"925649773839274452491561650144948752050130012486177826988126"
+	"133554403773571512580898635972841985977652158668303592410057"
+	"485055436893587380313242844652436291364883334876866373311810"
+	"391895906041249920179723438523926050490574435761198732799454"
+	"008328601995279369226500621163352467597636993886640968957328"
+	"759949044276170122921768961434372739233954717422161598402486"
+	"463562568010839156672068113464709841286305137476061350600397"
+	"175907020969729308144287590324042697591017096717907564631781"
+	"439497876238218367926624772476240528428497183335504496221406"
+	"589555810540817513124718197127267224799624659585770569520809"
+	"281604412582256098977052626144946073391262169280695214065206"
+	"191196882432874733945382251190278754652209922562331114772650"
+	"497261742510284521207616205672365062582692877813200207403540"
+	"525063110942661164068107092728343048623205392942051434543571"
+	"313138796794932600173486689427304744941782491373878982973283"
+	"368335890090381801696812708507741807095177070299966369396832"
+	"400478172876331010837944044285417404158119166962326774985551"
+	"977442738779427866618350449884385747587744223560873681851572"
+	"286273358790586601545583095359120704012955847366215042688472"
+	"675952237658358631742557566972678189310475234143289186877051"
+	"340683603613637426403829661085459945459117058256974179890432"
+	"867675513107283197429543558561167317109611383379573588859184"
+	"456986416695596941668080749172268841811589175366991766096875"
+	"222884266918204001833615235594091557995562838623294974789125"
+	"752614578305794977612289604884130826111306367453855314666345"
+	"157438402390356984864035170441570392268310855288053708102740"
+	"439777561760841229529331176378948990099061185912557252553034"
+	"927831994326130478412555374881133922596995646540483669649078"
+	"250090369467413503689932168602378246603463681781834765162360"
+	"166312931857476126935202856064126661484010808331530126027455"
+	"857508729691038481528513446053171515463960411505234866517154"
+	"725160907578486319640354194415542516677642340347221174213931"
+	"321029989688425270730686249989511569167555123814046714281953"
+	"786734341427651870385892800875995539114072995827817596521773"
+	"982651121892446311307769359800622836551489923678951514750326"
+	"661626880961762622816491691715060246449414248550746787617325"
+	"139839884680707930922756753880247633562419411563780243940005"
+	"022193436897594984668402646225279074559756339348787995435182"
+	"065213830376187954393380864292006450020651200395456393156982"
+	"011476834805159362927432514990634385312969224538639688728159"
+	"973531258811796864627051700512199746660646944753061646538425"
+	"582630438084285077983310856714164376961640080961717397213818"
+	"771197143123061632103503825992262465539661259702404081296744"
+	"420767359447841790066676458058968510480936381375966706969370"
+	"106992129579192993809372222505095628079817793413846841465472"
+	"863149825641819104195312361940606036340639077614015570973705"
+	"912589812036600795550616030955386044659620287623372802587162"
+	"557803150386942440617902799475289022644335161936545324332896"
+	"88740976918528",
+	false,
+	-INF,
+	-INF,
+	-0xf.fffffp+124,
+	-0xf.fffffp+124,
+	false,
+	-INF,
+	-INF,
+	-0xf.ffffffffffff8p+1020,
+	-0xf.ffffffffffff8p+1020,
+	false,
+	-INF,
+	-INF,
+	-0xf.fffffffffffffffp+16380,
+	-0xf.fffffffffffffffp+16380,
+	false,
+	-INF,
+	-INF,
+	-0xf.fffffffffffffffp+16380,
+	-0xf.fffffffffffffffp+16380,
+	false,
+	-INF,
+	-INF,
+	-0xf.fffffffffffffffffffffffffcp+1020,
+	-0xf.fffffffffffffffffffffffffcp+1020,
+	true,
+	-0xf.fffffffffffffff8p+16380,
+	-0xf.fffffffffffffff8p+16380,
+	-0xf.fffffffffffffff8p+16380,
+	-0xf.fffffffffffffff8p+16380),
+  TEST ("-11897314953572317650535115898294886679662540046955672189564"
+	"992775624991818517272047604494429045704613843305676461674432"
+	"866625552674894879302363251360976543423772324175364890803620"
+	"295849512464856057409281781366112306742190485003818118052078"
+	"772031072688123988858081705170326877675791955126044261129699"
+	"396973090649704213573735937375481897910645780753965202780415"
+	"649198777103321178718599649232063111754347532212262535343371"
+	"993046295041376686778121033597302229356100713434253256335626"
+	"260926746006333581938790554139375924354799347471554969135207"
+	"489145008478345997066048168999167477130744355145855113727460"
+	"309467890753717757969993123542278665878033709928620727303315"
+	"029513384763573500894534606963545215725469260777653830445770"
+	"759828922000473802306059479839266050745593742888876351466140"
+	"875806890650652714372072315620373967637281857809084061421662"
+	"170478777461125682321343132563405680950569117598842460665407"
+	"282311595082762737780867357418154719866871414214323444755020"
+	"626919754577426399313011977881065904362131270710906843388616"
+	"287722284449151893034189631356123898852036080360753498717830"
+	"504352093729983817344408350202734045216258203829600957480880"
+	"965874243489786075596134375241954380265323921633710337029274"
+	"293549750247462645455972901709456023486723670137923023480984"
+	"326373964090956138849322772517198353100315479985058037525464"
+	"068668437065027531831663253992097096980383887291442476053511"
+	"144486474884757304296356929167940017889669686202650070027982"
+	"663530247170220662730379904763297146001719954456737323161037"
+	"625687998713431793415001444343614571054613792449048952524152"
+	"301827123990674364566397677805989512744251739768252594443095"
+	"190764810995247945468565558165257102133176140103896204912204"
+	"711100918575738374382781125401477094460271337818745109520013"
+	"261170063238642079258520795413706442699571265644934353412012"
+	"077085749881367374258647858396451240603093070419748672763633"
+	"383700186361051628692830089177438307110502291931440850296880"
+	"946384837732466801411559238352132478536167637258246808571677"
+	"518370907804879008402283872836145473465090448048901436918497"
+	"925649773839274452491561650144948752050130012486177826988126"
+	"133554403773571512580898635972841985977652158668303592410057"
+	"485055436893587380313242844652436291364883334876866373311810"
+	"391895906041249920179723438523926050490574435761198732799454"
+	"008328601995279369226500621163352467597636993886640968957328"
+	"759949044276170122921768961434372739233954717422161598402486"
+	"463562568010839156672068113464709841286305137476061350600397"
+	"175907020969729308144287590324042697591017096717907564631781"
+	"439497876238218367926624772476240528428497183335504496221406"
+	"589555810540817513124718197127267224799624659585770569520809"
+	"281604412582256098977052626144946073391262169280695214065206"
+	"191196882432874733945382251190278754652209922562331114772650"
+	"497261742510284521207616205672365062582692877813200207403540"
+	"525063110942661164068107092728343048623205392942051434543571"
+	"313138796794932600173486689427304744941782491373878982973283"
+	"368335890090381801696812708507741807095177070299966369396832"
+	"400478172876331010837944044285417404158119166962326774985551"
+	"977442738779427866618350449884385747587744223560873681851572"
+	"286273358790586601545583095359120704012955847366215042688472"
+	"675952237658358631742557566972678189310475234143289186877051"
+	"340683603613637426403829661085459945459117058256974179890432"
+	"867675513107283197429543558561167317109611383379573588859184"
+	"456986416695596941668080749172268841811589175366991766096875"
+	"222884266918204001833615235594091557995562838623294974789125"
+	"752614578305794977612289604884130826111306367453855314666345"
+	"157438402390356984864035170441570392268310855288053708102740"
+	"439777561760841229529331176378948990099061185912557252553034"
+	"927831994326130478412555374881133922596995646540483669649078"
+	"250090369467413503689932168602378246603463681781834765162360"
+	"166312931857476126935202856064126661484010808331530126027455"
+	"857508729691038481528513446053171515463960411505234866517154"
+	"725160907578486319640354194415542516677642340347221174213931"
+	"321029989688425270730686249989511569167555123814046714281953"
+	"786734341427651870385892800875995539114072995827817596521773"
+	"982651121892446311307769359800622836551489923678951514750326"
+	"661626880961762622816491691715060246449414248550746787617325"
+	"139839884680707930922756753880247633562419411563780243940005"
+	"022193436897594984668402646225279074559756339348787995435182"
+	"065213830376187954393380864292006450020651200395456393156982"
+	"011476834805159362927432514990634385312969224538639688728159"
+	"973531258811796864627051700512199746660646944753061646538425"
+	"582630438084285077983310856714164376961640080961717397213818"
+	"771197143123061632103503825992262465539661259702404081296744"
+	"420767359447841790066676458058968510480936381375966706969370"
+	"106992129579192993809372222505095628079817793413846841465472"
+	"863149825641819104195312361940606036340639077614015570973705"
+	"912589812036600795550616030955386044659620287623372802587162"
+	"557803150386942440617902799475289022644335161936545324332896"
+	"88740976918528.001",
+	false,
+	-INF,
+	-INF,
+	-0xf.fffffp+124,
+	-0xf.fffffp+124,
+	false,
+	-INF,
+	-INF,
+	-0xf.ffffffffffff8p+1020,
+	-0xf.ffffffffffff8p+1020,
+	false,
+	-INF,
+	-INF,
+	-0xf.fffffffffffffffp+16380,
+	-0xf.fffffffffffffffp+16380,
+	false,
+	-INF,
+	-INF,
+	-0xf.fffffffffffffffp+16380,
+	-0xf.fffffffffffffffp+16380,
+	false,
+	-INF,
+	-INF,
+	-0xf.fffffffffffffffffffffffffcp+1020,
+	-0xf.fffffffffffffffffffffffffcp+1020,
+	false,
+	-0xf.fffffffffffffff8000000000008p+16380,
+	-0xf.fffffffffffffff8p+16380,
+	-0xf.fffffffffffffff8p+16380,
+	-0xf.fffffffffffffff8p+16380),
+  TEST ("118973149535723176508575932662800707347995686986910214150118"
+	"685272271246896789803961473130416053705672050873552479421805"
+	"932646640744124594447361172514341324846716679654551308018400"
+	"452551246797021031695590308415421099521962856162050274568841"
+	"297915828747574343774874752902176710049525787625138678906010"
+	"048638212027057374683542842282633896097240913572043788690878"
+	"561421008447838407815393303366617352859876685151925036335142"
+	"606462825839541908847139311166770091872983498508632067665424"
+	"131663456011801988221011933744533095583591952713287509471572"
+	"005635584655570174753698625195967118200265238753375268656404"
+	"300638718932246773699829720984119713851462400809295266529707"
+	"450603039675996477317034685632764277790214944500590950459817"
+	"905458649624723235138950801408157339866516893477731877579183"
+	"713595679581558427625325833939652897845282019149923069371763"
+	"621014587926698827182969408373803807712292191282429102445352"
+	"493434039402290243933941906906661090602900960765874258303002"
+	"994639315656152078708796474719793763077934223746582725715380"
+	"546621026022818892467551940977566283266498758568504813830755"
+	"715585325649227824857891916443381390920079346240984072859876"
+	"394789650127468861490822526766717770136680743866932662343305"
+	"821821344306240809967537078707691232937387041140557168161956"
+	"672595323950666742010786584275766171661791973302251394804664"
+	"351065107886557299707326005651230394674710597929211000345040"
+	"748992483614253006562424867893567074606589931788062200063807"
+	"336740036940230215831403322125165368742446805152078682411506"
+	"081843753974005583111391605547148303480887461773984314393817"
+	"233328426227146997925421743280885595916487699461777590949432"
+	"536021389649845214065322016198143547250143861460313408300535"
+	"800647014276175548485543791298383644643679669618879907720347"
+	"361578030001247419574448359597988425487829219851305162204925"
+	"876422580754230478244492592334149461342828532046897137732862"
+	"560405101567370570895662663174689131741739602970845694214086"
+	"383402465037069569640956912385125748139813888875258203003486"
+	"978747055202810394072908580324008598756993885667142200558137"
+	"216665049755676940757442911860295559656788759871904662758651"
+	"106796978788783386988295123326864580419821595430891867179378"
+	"372968821128698879468814267529461494723425453808822356093436"
+	"114567635804621183162768389034017821036515461700163537265334"
+	"837042272659885702600247792917728828912373907035369136531164"
+	"551871575024551077026080114197652598224677403885378544255851"
+	"452142889211152237506343909351748731538683443195842912801950"
+	"740929058503113127929421291089844021925400931905939216271347"
+	"501989193058654389516377770771439860033940981826669939750630"
+	"966060749188986231404992238674933998516958950824840538996637"
+	"227947236848099456610159878061379742621311380927234118601003"
+	"068752002060437285024623575047782086630607224900910789188204"
+	"422115342157245494745974521832782208601602710639261482504706"
+	"793704189474198047840288064399210243702202724597107455534275"
+	"321401119382263147115748905050195256886082040192083380490209"
+	"648570353905656303876661710430922155024620842080323610266391"
+	"819853291160589645614945256684769911320943457402697573094119"
+	"430125589389298495428377185239916427991844172165080029177729"
+	"625180644077484441695092005844026411665118679537869781924378"
+	"377060887769389297625907410934020531742739577183152327119791"
+	"567636713426904553654134937766951789571845662564530364234831"
+	"655818811851573018210173773037253988893680153247404060131255"
+	"432297982534770778617218088583998040670598195597843579610890"
+	"315316606725381521608825464438386306376596459107591134507541"
+	"153403024199191222328259713530472683187873517955642380703639"
+	"029816037096049042094836437281075965243968431839386959736989"
+	"889027924230006904683050305965712585804355337311372959487108"
+	"794286031594805559334414767793211932142402860019029250966461"
+	"933621763149049802791695077716375242516443825235146860078555"
+	"453142397983479144560015010889077242726183149587493050950967"
+	"941488752366197740591478464591650201477772717579831983405962"
+	"171742164889284586217913115136227964861078958766284010901639"
+	"781256012341028188155836968476480842715858962105341815444164"
+	"696766584018508513610260777540911573496315580383328678958350"
+	"148157337222619548467971967434956296433870815461340134721800"
+	"205755114983399523323106573720732056659216468891205124203527"
+	"449961814733926916757607468806003312492414061695431041238453"
+	"023522795690830184799840657478014435335788410588338795921829"
+	"674102072285495410088727730494748054715270026371111466557692"
+	"092596172401951206117443077191868585496116051853795368595736"
+	"003882511620497061598923985774687093334185939744167238203676"
+	"453052472980823976562293117120372063945943890666325365061961"
+	"022928215929070357135085816756816486043117613837876554929621"
+	"856269743752885605649447338817178927896144473776360438797900"
+	"366212779802747593450564030114752479071739585723270865632758"
+	"495434839556211713523098602573445161475191311400514062427097"
+	"780117858230840648695846140902244217544683559565818359212130"
+	"972233447491583165728635513802591543441145939539353470970452"
+	"5536550715391.999",
+	false,
+	0xf.fffffp+124,
+	INF,
+	0xf.fffffp+124,
+	INF,
+	false,
+	0xf.ffffffffffff8p+1020,
+	INF,
+	0xf.ffffffffffff8p+1020,
+	INF,
+	false,
+	0xf.fffffffffffffffp+16380,
+	INF,
+	0xf.fffffffffffffffp+16380,
+	INF,
+	false,
+	0xf.fffffffffffffffp+16380,
+	INF,
+	0xf.fffffffffffffffp+16380,
+	INF,
+	false,
+	0xf.fffffffffffffffffffffffffcp+1020,
+	INF,
+	0xf.fffffffffffffffffffffffffcp+1020,
+	INF,
+	false,
+	0xf.fffffffffffffffffffffffffff8p+16380,
+	0xf.fffffffffffffffffffffffffff8p+16380,
+	0xf.fffffffffffffffffffffffffff8p+16380,
+	INF),
+  TEST ("118973149535723176508575932662800707347995686986910214150118"
+	"685272271246896789803961473130416053705672050873552479421805"
+	"932646640744124594447361172514341324846716679654551308018400"
+	"452551246797021031695590308415421099521962856162050274568841"
+	"297915828747574343774874752902176710049525787625138678906010"
+	"048638212027057374683542842282633896097240913572043788690878"
+	"561421008447838407815393303366617352859876685151925036335142"
+	"606462825839541908847139311166770091872983498508632067665424"
+	"131663456011801988221011933744533095583591952713287509471572"
+	"005635584655570174753698625195967118200265238753375268656404"
+	"300638718932246773699829720984119713851462400809295266529707"
+	"450603039675996477317034685632764277790214944500590950459817"
+	"905458649624723235138950801408157339866516893477731877579183"
+	"713595679581558427625325833939652897845282019149923069371763"
+	"621014587926698827182969408373803807712292191282429102445352"
+	"493434039402290243933941906906661090602900960765874258303002"
+	"994639315656152078708796474719793763077934223746582725715380"
+	"546621026022818892467551940977566283266498758568504813830755"
+	"715585325649227824857891916443381390920079346240984072859876"
+	"394789650127468861490822526766717770136680743866932662343305"
+	"821821344306240809967537078707691232937387041140557168161956"
+	"672595323950666742010786584275766171661791973302251394804664"
+	"351065107886557299707326005651230394674710597929211000345040"
+	"748992483614253006562424867893567074606589931788062200063807"
+	"336740036940230215831403322125165368742446805152078682411506"
+	"081843753974005583111391605547148303480887461773984314393817"
+	"233328426227146997925421743280885595916487699461777590949432"
+	"536021389649845214065322016198143547250143861460313408300535"
+	"800647014276175548485543791298383644643679669618879907720347"
+	"361578030001247419574448359597988425487829219851305162204925"
+	"876422580754230478244492592334149461342828532046897137732862"
+	"560405101567370570895662663174689131741739602970845694214086"
+	"383402465037069569640956912385125748139813888875258203003486"
+	"978747055202810394072908580324008598756993885667142200558137"
+	"216665049755676940757442911860295559656788759871904662758651"
+	"106796978788783386988295123326864580419821595430891867179378"
+	"372968821128698879468814267529461494723425453808822356093436"
+	"114567635804621183162768389034017821036515461700163537265334"
+	"837042272659885702600247792917728828912373907035369136531164"
+	"551871575024551077026080114197652598224677403885378544255851"
+	"452142889211152237506343909351748731538683443195842912801950"
+	"740929058503113127929421291089844021925400931905939216271347"
+	"501989193058654389516377770771439860033940981826669939750630"
+	"966060749188986231404992238674933998516958950824840538996637"
+	"227947236848099456610159878061379742621311380927234118601003"
+	"068752002060437285024623575047782086630607224900910789188204"
+	"422115342157245494745974521832782208601602710639261482504706"
+	"793704189474198047840288064399210243702202724597107455534275"
+	"321401119382263147115748905050195256886082040192083380490209"
+	"648570353905656303876661710430922155024620842080323610266391"
+	"819853291160589645614945256684769911320943457402697573094119"
+	"430125589389298495428377185239916427991844172165080029177729"
+	"625180644077484441695092005844026411665118679537869781924378"
+	"377060887769389297625907410934020531742739577183152327119791"
+	"567636713426904553654134937766951789571845662564530364234831"
+	"655818811851573018210173773037253988893680153247404060131255"
+	"432297982534770778617218088583998040670598195597843579610890"
+	"315316606725381521608825464438386306376596459107591134507541"
+	"153403024199191222328259713530472683187873517955642380703639"
+	"029816037096049042094836437281075965243968431839386959736989"
+	"889027924230006904683050305965712585804355337311372959487108"
+	"794286031594805559334414767793211932142402860019029250966461"
+	"933621763149049802791695077716375242516443825235146860078555"
+	"453142397983479144560015010889077242726183149587493050950967"
+	"941488752366197740591478464591650201477772717579831983405962"
+	"171742164889284586217913115136227964861078958766284010901639"
+	"781256012341028188155836968476480842715858962105341815444164"
+	"696766584018508513610260777540911573496315580383328678958350"
+	"148157337222619548467971967434956296433870815461340134721800"
+	"205755114983399523323106573720732056659216468891205124203527"
+	"449961814733926916757607468806003312492414061695431041238453"
+	"023522795690830184799840657478014435335788410588338795921829"
+	"674102072285495410088727730494748054715270026371111466557692"
+	"092596172401951206117443077191868585496116051853795368595736"
+	"003882511620497061598923985774687093334185939744167238203676"
+	"453052472980823976562293117120372063945943890666325365061961"
+	"022928215929070357135085816756816486043117613837876554929621"
+	"856269743752885605649447338817178927896144473776360438797900"
+	"366212779802747593450564030114752479071739585723270865632758"
+	"495434839556211713523098602573445161475191311400514062427097"
+	"780117858230840648695846140902244217544683559565818359212130"
+	"972233447491583165728635513802591543441145939539353470970452"
+	"5536550715392",
+	false,
+	0xf.fffffp+124,
+	INF,
+	0xf.fffffp+124,
+	INF,
+	false,
+	0xf.ffffffffffff8p+1020,
+	INF,
+	0xf.ffffffffffff8p+1020,
+	INF,
+	false,
+	0xf.fffffffffffffffp+16380,
+	INF,
+	0xf.fffffffffffffffp+16380,
+	INF,
+	false,
+	0xf.fffffffffffffffp+16380,
+	INF,
+	0xf.fffffffffffffffp+16380,
+	INF,
+	false,
+	0xf.fffffffffffffffffffffffffcp+1020,
+	INF,
+	0xf.fffffffffffffffffffffffffcp+1020,
+	INF,
+	false,
+	0xf.fffffffffffffffffffffffffff8p+16380,
+	INF,
+	0xf.fffffffffffffffffffffffffff8p+16380,
+	INF),
+  TEST ("118973149535723176508575932662800707347995686986910214150118"
+	"685272271246896789803961473130416053705672050873552479421805"
+	"932646640744124594447361172514341324846716679654551308018400"
+	"452551246797021031695590308415421099521962856162050274568841"
+	"297915828747574343774874752902176710049525787625138678906010"
+	"048638212027057374683542842282633896097240913572043788690878"
+	"561421008447838407815393303366617352859876685151925036335142"
+	"606462825839541908847139311166770091872983498508632067665424"
+	"131663456011801988221011933744533095583591952713287509471572"
+	"005635584655570174753698625195967118200265238753375268656404"
+	"300638718932246773699829720984119713851462400809295266529707"
+	"450603039675996477317034685632764277790214944500590950459817"
+	"905458649624723235138950801408157339866516893477731877579183"
+	"713595679581558427625325833939652897845282019149923069371763"
+	"621014587926698827182969408373803807712292191282429102445352"
+	"493434039402290243933941906906661090602900960765874258303002"
+	"994639315656152078708796474719793763077934223746582725715380"
+	"546621026022818892467551940977566283266498758568504813830755"
+	"715585325649227824857891916443381390920079346240984072859876"
+	"394789650127468861490822526766717770136680743866932662343305"
+	"821821344306240809967537078707691232937387041140557168161956"
+	"672595323950666742010786584275766171661791973302251394804664"
+	"351065107886557299707326005651230394674710597929211000345040"
+	"748992483614253006562424867893567074606589931788062200063807"
+	"336740036940230215831403322125165368742446805152078682411506"
+	"081843753974005583111391605547148303480887461773984314393817"
+	"233328426227146997925421743280885595916487699461777590949432"
+	"536021389649845214065322016198143547250143861460313408300535"
+	"800647014276175548485543791298383644643679669618879907720347"
+	"361578030001247419574448359597988425487829219851305162204925"
+	"876422580754230478244492592334149461342828532046897137732862"
+	"560405101567370570895662663174689131741739602970845694214086"
+	"383402465037069569640956912385125748139813888875258203003486"
+	"978747055202810394072908580324008598756993885667142200558137"
+	"216665049755676940757442911860295559656788759871904662758651"
+	"106796978788783386988295123326864580419821595430891867179378"
+	"372968821128698879468814267529461494723425453808822356093436"
+	"114567635804621183162768389034017821036515461700163537265334"
+	"837042272659885702600247792917728828912373907035369136531164"
+	"551871575024551077026080114197652598224677403885378544255851"
+	"452142889211152237506343909351748731538683443195842912801950"
+	"740929058503113127929421291089844021925400931905939216271347"
+	"501989193058654389516377770771439860033940981826669939750630"
+	"966060749188986231404992238674933998516958950824840538996637"
+	"227947236848099456610159878061379742621311380927234118601003"
+	"068752002060437285024623575047782086630607224900910789188204"
+	"422115342157245494745974521832782208601602710639261482504706"
+	"793704189474198047840288064399210243702202724597107455534275"
+	"321401119382263147115748905050195256886082040192083380490209"
+	"648570353905656303876661710430922155024620842080323610266391"
+	"819853291160589645614945256684769911320943457402697573094119"
+	"430125589389298495428377185239916427991844172165080029177729"
+	"625180644077484441695092005844026411665118679537869781924378"
+	"377060887769389297625907410934020531742739577183152327119791"
+	"567636713426904553654134937766951789571845662564530364234831"
+	"655818811851573018210173773037253988893680153247404060131255"
+	"432297982534770778617218088583998040670598195597843579610890"
+	"315316606725381521608825464438386306376596459107591134507541"
+	"153403024199191222328259713530472683187873517955642380703639"
+	"029816037096049042094836437281075965243968431839386959736989"
+	"889027924230006904683050305965712585804355337311372959487108"
+	"794286031594805559334414767793211932142402860019029250966461"
+	"933621763149049802791695077716375242516443825235146860078555"
+	"453142397983479144560015010889077242726183149587493050950967"
+	"941488752366197740591478464591650201477772717579831983405962"
+	"171742164889284586217913115136227964861078958766284010901639"
+	"781256012341028188155836968476480842715858962105341815444164"
+	"696766584018508513610260777540911573496315580383328678958350"
+	"148157337222619548467971967434956296433870815461340134721800"
+	"205755114983399523323106573720732056659216468891205124203527"
+	"449961814733926916757607468806003312492414061695431041238453"
+	"023522795690830184799840657478014435335788410588338795921829"
+	"674102072285495410088727730494748054715270026371111466557692"
+	"092596172401951206117443077191868585496116051853795368595736"
+	"003882511620497061598923985774687093334185939744167238203676"
+	"453052472980823976562293117120372063945943890666325365061961"
+	"022928215929070357135085816756816486043117613837876554929621"
+	"856269743752885605649447338817178927896144473776360438797900"
+	"366212779802747593450564030114752479071739585723270865632758"
+	"495434839556211713523098602573445161475191311400514062427097"
+	"780117858230840648695846140902244217544683559565818359212130"
+	"972233447491583165728635513802591543441145939539353470970452"
+	"5536550715392.001",
+	false,
+	0xf.fffffp+124,
+	INF,
+	0xf.fffffp+124,
+	INF,
+	false,
+	0xf.ffffffffffff8p+1020,
+	INF,
+	0xf.ffffffffffff8p+1020,
+	INF,
+	false,
+	0xf.fffffffffffffffp+16380,
+	INF,
+	0xf.fffffffffffffffp+16380,
+	INF,
+	false,
+	0xf.fffffffffffffffp+16380,
+	INF,
+	0xf.fffffffffffffffp+16380,
+	INF,
+	false,
+	0xf.fffffffffffffffffffffffffcp+1020,
+	INF,
+	0xf.fffffffffffffffffffffffffcp+1020,
+	INF,
+	false,
+	0xf.fffffffffffffffffffffffffff8p+16380,
+	INF,
+	0xf.fffffffffffffffffffffffffff8p+16380,
+	INF),
+  TEST ("-11897314953572317650857593266280070734799568698691021415011"
+	"868527227124689678980396147313041605370567205087355247942180"
+	"593264664074412459444736117251434132484671667965455130801840"
+	"045255124679702103169559030841542109952196285616205027456884"
+	"129791582874757434377487475290217671004952578762513867890601"
+	"004863821202705737468354284228263389609724091357204378869087"
+	"856142100844783840781539330336661735285987668515192503633514"
+	"260646282583954190884713931116677009187298349850863206766542"
+	"413166345601180198822101193374453309558359195271328750947157"
+	"200563558465557017475369862519596711820026523875337526865640"
+	"430063871893224677369982972098411971385146240080929526652970"
+	"745060303967599647731703468563276427779021494450059095045981"
+	"790545864962472323513895080140815733986651689347773187757918"
+	"371359567958155842762532583393965289784528201914992306937176"
+	"362101458792669882718296940837380380771229219128242910244535"
+	"249343403940229024393394190690666109060290096076587425830300"
+	"299463931565615207870879647471979376307793422374658272571538"
+	"054662102602281889246755194097756628326649875856850481383075"
+	"571558532564922782485789191644338139092007934624098407285987"
+	"639478965012746886149082252676671777013668074386693266234330"
+	"582182134430624080996753707870769123293738704114055716816195"
+	"667259532395066674201078658427576617166179197330225139480466"
+	"435106510788655729970732600565123039467471059792921100034504"
+	"074899248361425300656242486789356707460658993178806220006380"
+	"733674003694023021583140332212516536874244680515207868241150"
+	"608184375397400558311139160554714830348088746177398431439381"
+	"723332842622714699792542174328088559591648769946177759094943"
+	"253602138964984521406532201619814354725014386146031340830053"
+	"580064701427617554848554379129838364464367966961887990772034"
+	"736157803000124741957444835959798842548782921985130516220492"
+	"587642258075423047824449259233414946134282853204689713773286"
+	"256040510156737057089566266317468913174173960297084569421408"
+	"638340246503706956964095691238512574813981388887525820300348"
+	"697874705520281039407290858032400859875699388566714220055813"
+	"721666504975567694075744291186029555965678875987190466275865"
+	"110679697878878338698829512332686458041982159543089186717937"
+	"837296882112869887946881426752946149472342545380882235609343"
+	"611456763580462118316276838903401782103651546170016353726533"
+	"483704227265988570260024779291772882891237390703536913653116"
+	"455187157502455107702608011419765259822467740388537854425585"
+	"145214288921115223750634390935174873153868344319584291280195"
+	"074092905850311312792942129108984402192540093190593921627134"
+	"750198919305865438951637777077143986003394098182666993975063"
+	"096606074918898623140499223867493399851695895082484053899663"
+	"722794723684809945661015987806137974262131138092723411860100"
+	"306875200206043728502462357504778208663060722490091078918820"
+	"442211534215724549474597452183278220860160271063926148250470"
+	"679370418947419804784028806439921024370220272459710745553427"
+	"532140111938226314711574890505019525688608204019208338049020"
+	"964857035390565630387666171043092215502462084208032361026639"
+	"181985329116058964561494525668476991132094345740269757309411"
+	"943012558938929849542837718523991642799184417216508002917772"
+	"962518064407748444169509200584402641166511867953786978192437"
+	"837706088776938929762590741093402053174273957718315232711979"
+	"156763671342690455365413493776695178957184566256453036423483"
+	"165581881185157301821017377303725398889368015324740406013125"
+	"543229798253477077861721808858399804067059819559784357961089"
+	"031531660672538152160882546443838630637659645910759113450754"
+	"115340302419919122232825971353047268318787351795564238070363"
+	"902981603709604904209483643728107596524396843183938695973698"
+	"988902792423000690468305030596571258580435533731137295948710"
+	"879428603159480555933441476779321193214240286001902925096646"
+	"193362176314904980279169507771637524251644382523514686007855"
+	"545314239798347914456001501088907724272618314958749305095096"
+	"794148875236619774059147846459165020147777271757983198340596"
+	"217174216488928458621791311513622796486107895876628401090163"
+	"978125601234102818815583696847648084271585896210534181544416"
+	"469676658401850851361026077754091157349631558038332867895835"
+	"014815733722261954846797196743495629643387081546134013472180"
+	"020575511498339952332310657372073205665921646889120512420352"
+	"744996181473392691675760746880600331249241406169543104123845"
+	"302352279569083018479984065747801443533578841058833879592182"
+	"967410207228549541008872773049474805471527002637111146655769"
+	"209259617240195120611744307719186858549611605185379536859573"
+	"600388251162049706159892398577468709333418593974416723820367"
+	"645305247298082397656229311712037206394594389066632536506196"
+	"102292821592907035713508581675681648604311761383787655492962"
+	"185626974375288560564944733881717892789614447377636043879790"
+	"036621277980274759345056403011475247907173958572327086563275"
+	"849543483955621171352309860257344516147519131140051406242709"
+	"778011785823084064869584614090224421754468355956581835921213"
+	"097223344749158316572863551380259154344114593953935347097045"
+	"25536550715391.999",
+	false,
+	-INF,
+	-INF,
+	-0xf.fffffp+124,
+	-0xf.fffffp+124,
+	false,
+	-INF,
+	-INF,
+	-0xf.ffffffffffff8p+1020,
+	-0xf.ffffffffffff8p+1020,
+	false,
+	-INF,
+	-INF,
+	-0xf.fffffffffffffffp+16380,
+	-0xf.fffffffffffffffp+16380,
+	false,
+	-INF,
+	-INF,
+	-0xf.fffffffffffffffp+16380,
+	-0xf.fffffffffffffffp+16380,
+	false,
+	-INF,
+	-INF,
+	-0xf.fffffffffffffffffffffffffcp+1020,
+	-0xf.fffffffffffffffffffffffffcp+1020,
+	false,
+	-INF,
+	-0xf.fffffffffffffffffffffffffff8p+16380,
+	-0xf.fffffffffffffffffffffffffff8p+16380,
+	-0xf.fffffffffffffffffffffffffff8p+16380),
+  TEST ("-11897314953572317650857593266280070734799568698691021415011"
+	"868527227124689678980396147313041605370567205087355247942180"
+	"593264664074412459444736117251434132484671667965455130801840"
+	"045255124679702103169559030841542109952196285616205027456884"
+	"129791582874757434377487475290217671004952578762513867890601"
+	"004863821202705737468354284228263389609724091357204378869087"
+	"856142100844783840781539330336661735285987668515192503633514"
+	"260646282583954190884713931116677009187298349850863206766542"
+	"413166345601180198822101193374453309558359195271328750947157"
+	"200563558465557017475369862519596711820026523875337526865640"
+	"430063871893224677369982972098411971385146240080929526652970"
+	"745060303967599647731703468563276427779021494450059095045981"
+	"790545864962472323513895080140815733986651689347773187757918"
+	"371359567958155842762532583393965289784528201914992306937176"
+	"362101458792669882718296940837380380771229219128242910244535"
+	"249343403940229024393394190690666109060290096076587425830300"
+	"299463931565615207870879647471979376307793422374658272571538"
+	"054662102602281889246755194097756628326649875856850481383075"
+	"571558532564922782485789191644338139092007934624098407285987"
+	"639478965012746886149082252676671777013668074386693266234330"
+	"582182134430624080996753707870769123293738704114055716816195"
+	"667259532395066674201078658427576617166179197330225139480466"
+	"435106510788655729970732600565123039467471059792921100034504"
+	"074899248361425300656242486789356707460658993178806220006380"
+	"733674003694023021583140332212516536874244680515207868241150"
+	"608184375397400558311139160554714830348088746177398431439381"
+	"723332842622714699792542174328088559591648769946177759094943"
+	"253602138964984521406532201619814354725014386146031340830053"
+	"580064701427617554848554379129838364464367966961887990772034"
+	"736157803000124741957444835959798842548782921985130516220492"
+	"587642258075423047824449259233414946134282853204689713773286"
+	"256040510156737057089566266317468913174173960297084569421408"
+	"638340246503706956964095691238512574813981388887525820300348"
+	"697874705520281039407290858032400859875699388566714220055813"
+	"721666504975567694075744291186029555965678875987190466275865"
+	"110679697878878338698829512332686458041982159543089186717937"
+	"837296882112869887946881426752946149472342545380882235609343"
+	"611456763580462118316276838903401782103651546170016353726533"
+	"483704227265988570260024779291772882891237390703536913653116"
+	"455187157502455107702608011419765259822467740388537854425585"
+	"145214288921115223750634390935174873153868344319584291280195"
+	"074092905850311312792942129108984402192540093190593921627134"
+	"750198919305865438951637777077143986003394098182666993975063"
+	"096606074918898623140499223867493399851695895082484053899663"
+	"722794723684809945661015987806137974262131138092723411860100"
+	"306875200206043728502462357504778208663060722490091078918820"
+	"442211534215724549474597452183278220860160271063926148250470"
+	"679370418947419804784028806439921024370220272459710745553427"
+	"532140111938226314711574890505019525688608204019208338049020"
+	"964857035390565630387666171043092215502462084208032361026639"
+	"181985329116058964561494525668476991132094345740269757309411"
+	"943012558938929849542837718523991642799184417216508002917772"
+	"962518064407748444169509200584402641166511867953786978192437"
+	"837706088776938929762590741093402053174273957718315232711979"
+	"156763671342690455365413493776695178957184566256453036423483"
+	"165581881185157301821017377303725398889368015324740406013125"
+	"543229798253477077861721808858399804067059819559784357961089"
+	"031531660672538152160882546443838630637659645910759113450754"
+	"115340302419919122232825971353047268318787351795564238070363"
+	"902981603709604904209483643728107596524396843183938695973698"
+	"988902792423000690468305030596571258580435533731137295948710"
+	"879428603159480555933441476779321193214240286001902925096646"
+	"193362176314904980279169507771637524251644382523514686007855"
+	"545314239798347914456001501088907724272618314958749305095096"
+	"794148875236619774059147846459165020147777271757983198340596"
+	"217174216488928458621791311513622796486107895876628401090163"
+	"978125601234102818815583696847648084271585896210534181544416"
+	"469676658401850851361026077754091157349631558038332867895835"
+	"014815733722261954846797196743495629643387081546134013472180"
+	"020575511498339952332310657372073205665921646889120512420352"
+	"744996181473392691675760746880600331249241406169543104123845"
+	"302352279569083018479984065747801443533578841058833879592182"
+	"967410207228549541008872773049474805471527002637111146655769"
+	"209259617240195120611744307719186858549611605185379536859573"
+	"600388251162049706159892398577468709333418593974416723820367"
+	"645305247298082397656229311712037206394594389066632536506196"
+	"102292821592907035713508581675681648604311761383787655492962"
+	"185626974375288560564944733881717892789614447377636043879790"
+	"036621277980274759345056403011475247907173958572327086563275"
+	"849543483955621171352309860257344516147519131140051406242709"
+	"778011785823084064869584614090224421754468355956581835921213"
+	"097223344749158316572863551380259154344114593953935347097045"
+	"25536550715392",
+	false,
+	-INF,
+	-INF,
+	-0xf.fffffp+124,
+	-0xf.fffffp+124,
+	false,
+	-INF,
+	-INF,
+	-0xf.ffffffffffff8p+1020,
+	-0xf.ffffffffffff8p+1020,
+	false,
+	-INF,
+	-INF,
+	-0xf.fffffffffffffffp+16380,
+	-0xf.fffffffffffffffp+16380,
+	false,
+	-INF,
+	-INF,
+	-0xf.fffffffffffffffp+16380,
+	-0xf.fffffffffffffffp+16380,
+	false,
+	-INF,
+	-INF,
+	-0xf.fffffffffffffffffffffffffcp+1020,
+	-0xf.fffffffffffffffffffffffffcp+1020,
+	false,
+	-INF,
+	-INF,
+	-0xf.fffffffffffffffffffffffffff8p+16380,
+	-0xf.fffffffffffffffffffffffffff8p+16380),
+  TEST ("-11897314953572317650857593266280070734799568698691021415011"
+	"868527227124689678980396147313041605370567205087355247942180"
+	"593264664074412459444736117251434132484671667965455130801840"
+	"045255124679702103169559030841542109952196285616205027456884"
+	"129791582874757434377487475290217671004952578762513867890601"
+	"004863821202705737468354284228263389609724091357204378869087"
+	"856142100844783840781539330336661735285987668515192503633514"
+	"260646282583954190884713931116677009187298349850863206766542"
+	"413166345601180198822101193374453309558359195271328750947157"
+	"200563558465557017475369862519596711820026523875337526865640"
+	"430063871893224677369982972098411971385146240080929526652970"
+	"745060303967599647731703468563276427779021494450059095045981"
+	"790545864962472323513895080140815733986651689347773187757918"
+	"371359567958155842762532583393965289784528201914992306937176"
+	"362101458792669882718296940837380380771229219128242910244535"
+	"249343403940229024393394190690666109060290096076587425830300"
+	"299463931565615207870879647471979376307793422374658272571538"
+	"054662102602281889246755194097756628326649875856850481383075"
+	"571558532564922782485789191644338139092007934624098407285987"
+	"639478965012746886149082252676671777013668074386693266234330"
+	"582182134430624080996753707870769123293738704114055716816195"
+	"667259532395066674201078658427576617166179197330225139480466"
+	"435106510788655729970732600565123039467471059792921100034504"
+	"074899248361425300656242486789356707460658993178806220006380"
+	"733674003694023021583140332212516536874244680515207868241150"
+	"608184375397400558311139160554714830348088746177398431439381"
+	"723332842622714699792542174328088559591648769946177759094943"
+	"253602138964984521406532201619814354725014386146031340830053"
+	"580064701427617554848554379129838364464367966961887990772034"
+	"736157803000124741957444835959798842548782921985130516220492"
+	"587642258075423047824449259233414946134282853204689713773286"
+	"256040510156737057089566266317468913174173960297084569421408"
+	"638340246503706956964095691238512574813981388887525820300348"
+	"697874705520281039407290858032400859875699388566714220055813"
+	"721666504975567694075744291186029555965678875987190466275865"
+	"110679697878878338698829512332686458041982159543089186717937"
+	"837296882112869887946881426752946149472342545380882235609343"
+	"611456763580462118316276838903401782103651546170016353726533"
+	"483704227265988570260024779291772882891237390703536913653116"
+	"455187157502455107702608011419765259822467740388537854425585"
+	"145214288921115223750634390935174873153868344319584291280195"
+	"074092905850311312792942129108984402192540093190593921627134"
+	"750198919305865438951637777077143986003394098182666993975063"
+	"096606074918898623140499223867493399851695895082484053899663"
+	"722794723684809945661015987806137974262131138092723411860100"
+	"306875200206043728502462357504778208663060722490091078918820"
+	"442211534215724549474597452183278220860160271063926148250470"
+	"679370418947419804784028806439921024370220272459710745553427"
+	"532140111938226314711574890505019525688608204019208338049020"
+	"964857035390565630387666171043092215502462084208032361026639"
+	"181985329116058964561494525668476991132094345740269757309411"
+	"943012558938929849542837718523991642799184417216508002917772"
+	"962518064407748444169509200584402641166511867953786978192437"
+	"837706088776938929762590741093402053174273957718315232711979"
+	"156763671342690455365413493776695178957184566256453036423483"
+	"165581881185157301821017377303725398889368015324740406013125"
+	"543229798253477077861721808858399804067059819559784357961089"
+	"031531660672538152160882546443838630637659645910759113450754"
+	"115340302419919122232825971353047268318787351795564238070363"
+	"902981603709604904209483643728107596524396843183938695973698"
+	"988902792423000690468305030596571258580435533731137295948710"
+	"879428603159480555933441476779321193214240286001902925096646"
+	"193362176314904980279169507771637524251644382523514686007855"
+	"545314239798347914456001501088907724272618314958749305095096"
+	"794148875236619774059147846459165020147777271757983198340596"
+	"217174216488928458621791311513622796486107895876628401090163"
+	"978125601234102818815583696847648084271585896210534181544416"
+	"469676658401850851361026077754091157349631558038332867895835"
+	"014815733722261954846797196743495629643387081546134013472180"
+	"020575511498339952332310657372073205665921646889120512420352"
+	"744996181473392691675760746880600331249241406169543104123845"
+	"302352279569083018479984065747801443533578841058833879592182"
+	"967410207228549541008872773049474805471527002637111146655769"
+	"209259617240195120611744307719186858549611605185379536859573"
+	"600388251162049706159892398577468709333418593974416723820367"
+	"645305247298082397656229311712037206394594389066632536506196"
+	"102292821592907035713508581675681648604311761383787655492962"
+	"185626974375288560564944733881717892789614447377636043879790"
+	"036621277980274759345056403011475247907173958572327086563275"
+	"849543483955621171352309860257344516147519131140051406242709"
+	"778011785823084064869584614090224421754468355956581835921213"
+	"097223344749158316572863551380259154344114593953935347097045"
+	"25536550715392.001",
+	false,
+	-INF,
+	-INF,
+	-0xf.fffffp+124,
+	-0xf.fffffp+124,
+	false,
+	-INF,
+	-INF,
+	-0xf.ffffffffffff8p+1020,
+	-0xf.ffffffffffff8p+1020,
+	false,
+	-INF,
+	-INF,
+	-0xf.fffffffffffffffp+16380,
+	-0xf.fffffffffffffffp+16380,
+	false,
+	-INF,
+	-INF,
+	-0xf.fffffffffffffffp+16380,
+	-0xf.fffffffffffffffp+16380,
+	false,
+	-INF,
+	-INF,
+	-0xf.fffffffffffffffffffffffffcp+1020,
+	-0xf.fffffffffffffffffffffffffcp+1020,
+	false,
+	-INF,
+	-INF,
+	-0xf.fffffffffffffffffffffffffff8p+16380,
+	-0xf.fffffffffffffffffffffffffff8p+16380),
+  TEST ("2.1019476964872256063855943749348741969203929128147736576356"
+	"0242583468662402879090222995728254318237304687499e-45",
+	false,
+	0x8p-152,
+	0x8p-152,
+	0x8p-152,
+	0x1p-148,
+	false,
+	0xb.ffffffffffff8p-152,
+	0xcp-152,
+	0xb.ffffffffffff8p-152,
+	0xcp-152,
+	false,
+	0xb.fffffffffffffffp-152,
+	0xcp-152,
+	0xb.fffffffffffffffp-152,
+	0xcp-152,
+	false,
+	0xb.fffffffffffffffp-152,
+	0xcp-152,
+	0xb.fffffffffffffffp-152,
+	0xcp-152,
+	false,
+	0xb.fffffffffffffffffffffffffcp-152,
+	0xcp-152,
+	0xb.fffffffffffffffffffffffffcp-152,
+	0xcp-152,
+	false,
+	0xb.fffffffffffffffffffffffffff8p-152,
+	0xcp-152,
+	0xb.fffffffffffffffffffffffffff8p-152,
+	0xcp-152),
+  TEST ("2.1019476964872256063855943749348741969203929128147736576356"
+	"02425834686624028790902229957282543182373046875e-45",
+	false,
+	0x8p-152,
+	0x1p-148,
+	0x8p-152,
+	0x1p-148,
+	true,
+	0xcp-152,
+	0xcp-152,
+	0xcp-152,
+	0xcp-152,
+	true,
+	0xcp-152,
+	0xcp-152,
+	0xcp-152,
+	0xcp-152,
+	true,
+	0xcp-152,
+	0xcp-152,
+	0xcp-152,
+	0xcp-152,
+	true,
+	0xcp-152,
+	0xcp-152,
+	0xcp-152,
+	0xcp-152,
+	true,
+	0xcp-152,
+	0xcp-152,
+	0xcp-152,
+	0xcp-152),
+  TEST ("2.1019476964872256063855943749348741969203929128147736576356"
+	"0242583468662402879090222995728254318237304687501e-45",
+	false,
+	0x8p-152,
+	0x1p-148,
+	0x8p-152,
+	0x1p-148,
+	false,
+	0xcp-152,
+	0xcp-152,
+	0xcp-152,
+	0xc.0000000000008p-152,
+	false,
+	0xcp-152,
+	0xcp-152,
+	0xcp-152,
+	0xc.000000000000001p-152,
+	false,
+	0xcp-152,
+	0xcp-152,
+	0xcp-152,
+	0xc.000000000000001p-152,
+	false,
+	0xcp-152,
+	0xcp-152,
+	0xcp-152,
+	0xc.00000000000000000000000004p-152,
+	false,
+	0xcp-152,
+	0xcp-152,
+	0xcp-152,
+	0xc.0000000000000000000000000008p-152),
+  TEST ("-2.101947696487225606385594374934874196920392912814773657635"
+	"60242583468662402879090222995728254318237304687499e-45",
+	false,
+	-0x1p-148,
+	-0x8p-152,
+	-0x8p-152,
+	-0x8p-152,
+	false,
+	-0xcp-152,
+	-0xcp-152,
+	-0xb.ffffffffffff8p-152,
+	-0xb.ffffffffffff8p-152,
+	false,
+	-0xcp-152,
+	-0xcp-152,
+	-0xb.fffffffffffffffp-152,
+	-0xb.fffffffffffffffp-152,
+	false,
+	-0xcp-152,
+	-0xcp-152,
+	-0xb.fffffffffffffffp-152,
+	-0xb.fffffffffffffffp-152,
+	false,
+	-0xcp-152,
+	-0xcp-152,
+	-0xb.fffffffffffffffffffffffffcp-152,
+	-0xb.fffffffffffffffffffffffffcp-152,
+	false,
+	-0xcp-152,
+	-0xcp-152,
+	-0xb.fffffffffffffffffffffffffff8p-152,
+	-0xb.fffffffffffffffffffffffffff8p-152),
+  TEST ("-2.101947696487225606385594374934874196920392912814773657635"
+	"602425834686624028790902229957282543182373046875e-45",
+	false,
+	-0x1p-148,
+	-0x1p-148,
+	-0x8p-152,
+	-0x8p-152,
+	true,
+	-0xcp-152,
+	-0xcp-152,
+	-0xcp-152,
+	-0xcp-152,
+	true,
+	-0xcp-152,
+	-0xcp-152,
+	-0xcp-152,
+	-0xcp-152,
+	true,
+	-0xcp-152,
+	-0xcp-152,
+	-0xcp-152,
+	-0xcp-152,
+	true,
+	-0xcp-152,
+	-0xcp-152,
+	-0xcp-152,
+	-0xcp-152,
+	true,
+	-0xcp-152,
+	-0xcp-152,
+	-0xcp-152,
+	-0xcp-152),
+  TEST ("-2.101947696487225606385594374934874196920392912814773657635"
+	"60242583468662402879090222995728254318237304687501e-45",
+	false,
+	-0x1p-148,
+	-0x1p-148,
+	-0x8p-152,
+	-0x8p-152,
+	false,
+	-0xc.0000000000008p-152,
+	-0xcp-152,
+	-0xcp-152,
+	-0xcp-152,
+	false,
+	-0xc.000000000000001p-152,
+	-0xcp-152,
+	-0xcp-152,
+	-0xcp-152,
+	false,
+	-0xc.000000000000001p-152,
+	-0xcp-152,
+	-0xcp-152,
+	-0xcp-152,
+	false,
+	-0xc.00000000000000000000000004p-152,
+	-0xcp-152,
+	-0xcp-152,
+	-0xcp-152,
+	false,
+	-0xc.0000000000000000000000000008p-152,
+	-0xcp-152,
+	-0xcp-152,
+	-0xcp-152),
+  TEST ("3.5032461608120426773093239582247903282006548546912894293926"
+	"7070972447770671465150371659547090530395507812499e-45",
+	false,
+	0x1p-148,
+	0x1p-148,
+	0x1p-148,
+	0x1.8p-148,
+	false,
+	0x1.3ffffffffffffp-148,
+	0x1.4p-148,
+	0x1.3ffffffffffffp-148,
+	0x1.4p-148,
+	false,
+	0x1.3ffffffffffffffep-148,
+	0x1.4p-148,
+	0x1.3ffffffffffffffep-148,
+	0x1.4p-148,
+	false,
+	0x1.3ffffffffffffffep-148,
+	0x1.4p-148,
+	0x1.3ffffffffffffffep-148,
+	0x1.4p-148,
+	false,
+	0x1.3fffffffffffffffffffffffff8p-148,
+	0x1.4p-148,
+	0x1.3fffffffffffffffffffffffff8p-148,
+	0x1.4p-148,
+	false,
+	0x1.3fffffffffffffffffffffffffffp-148,
+	0x1.4p-148,
+	0x1.3fffffffffffffffffffffffffffp-148,
+	0x1.4p-148),
+  TEST ("3.5032461608120426773093239582247903282006548546912894293926"
+	"70709724477706714651503716595470905303955078125e-45",
+	false,
+	0x1p-148,
+	0x1p-148,
+	0x1p-148,
+	0x1.8p-148,
+	true,
+	0x1.4p-148,
+	0x1.4p-148,
+	0x1.4p-148,
+	0x1.4p-148,
+	true,
+	0x1.4p-148,
+	0x1.4p-148,
+	0x1.4p-148,
+	0x1.4p-148,
+	true,
+	0x1.4p-148,
+	0x1.4p-148,
+	0x1.4p-148,
+	0x1.4p-148,
+	true,
+	0x1.4p-148,
+	0x1.4p-148,
+	0x1.4p-148,
+	0x1.4p-148,
+	true,
+	0x1.4p-148,
+	0x1.4p-148,
+	0x1.4p-148,
+	0x1.4p-148),
+  TEST ("3.5032461608120426773093239582247903282006548546912894293926"
+	"7070972447770671465150371659547090530395507812501e-45",
+	false,
+	0x1p-148,
+	0x1.8p-148,
+	0x1p-148,
+	0x1.8p-148,
+	false,
+	0x1.4p-148,
+	0x1.4p-148,
+	0x1.4p-148,
+	0x1.4000000000001p-148,
+	false,
+	0x1.4p-148,
+	0x1.4p-148,
+	0x1.4p-148,
+	0x1.4000000000000002p-148,
+	false,
+	0x1.4p-148,
+	0x1.4p-148,
+	0x1.4p-148,
+	0x1.4000000000000002p-148,
+	false,
+	0x1.4p-148,
+	0x1.4p-148,
+	0x1.4p-148,
+	0x1.400000000000000000000000008p-148,
+	false,
+	0x1.4p-148,
+	0x1.4p-148,
+	0x1.4p-148,
+	0x1.4000000000000000000000000001p-148),
+  TEST ("-3.503246160812042677309323958224790328200654854691289429392"
+	"67070972447770671465150371659547090530395507812499e-45",
+	false,
+	-0x1.8p-148,
+	-0x1p-148,
+	-0x1p-148,
+	-0x1p-148,
+	false,
+	-0x1.4p-148,
+	-0x1.4p-148,
+	-0x1.3ffffffffffffp-148,
+	-0x1.3ffffffffffffp-148,
+	false,
+	-0x1.4p-148,
+	-0x1.4p-148,
+	-0x1.3ffffffffffffffep-148,
+	-0x1.3ffffffffffffffep-148,
+	false,
+	-0x1.4p-148,
+	-0x1.4p-148,
+	-0x1.3ffffffffffffffep-148,
+	-0x1.3ffffffffffffffep-148,
+	false,
+	-0x1.4p-148,
+	-0x1.4p-148,
+	-0x1.3fffffffffffffffffffffffff8p-148,
+	-0x1.3fffffffffffffffffffffffff8p-148,
+	false,
+	-0x1.4p-148,
+	-0x1.4p-148,
+	-0x1.3fffffffffffffffffffffffffffp-148,
+	-0x1.3fffffffffffffffffffffffffffp-148),
+  TEST ("-3.503246160812042677309323958224790328200654854691289429392"
+	"670709724477706714651503716595470905303955078125e-45",
+	false,
+	-0x1.8p-148,
+	-0x1p-148,
+	-0x1p-148,
+	-0x1p-148,
+	true,
+	-0x1.4p-148,
+	-0x1.4p-148,
+	-0x1.4p-148,
+	-0x1.4p-148,
+	true,
+	-0x1.4p-148,
+	-0x1.4p-148,
+	-0x1.4p-148,
+	-0x1.4p-148,
+	true,
+	-0x1.4p-148,
+	-0x1.4p-148,
+	-0x1.4p-148,
+	-0x1.4p-148,
+	true,
+	-0x1.4p-148,
+	-0x1.4p-148,
+	-0x1.4p-148,
+	-0x1.4p-148,
+	true,
+	-0x1.4p-148,
+	-0x1.4p-148,
+	-0x1.4p-148,
+	-0x1.4p-148),
+  TEST ("-3.503246160812042677309323958224790328200654854691289429392"
+	"67070972447770671465150371659547090530395507812501e-45",
+	false,
+	-0x1.8p-148,
+	-0x1.8p-148,
+	-0x1p-148,
+	-0x1p-148,
+	false,
+	-0x1.4000000000001p-148,
+	-0x1.4p-148,
+	-0x1.4p-148,
+	-0x1.4p-148,
+	false,
+	-0x1.4000000000000002p-148,
+	-0x1.4p-148,
+	-0x1.4p-148,
+	-0x1.4p-148,
+	false,
+	-0x1.4000000000000002p-148,
+	-0x1.4p-148,
+	-0x1.4p-148,
+	-0x1.4p-148,
+	false,
+	-0x1.400000000000000000000000008p-148,
+	-0x1.4p-148,
+	-0x1.4p-148,
+	-0x1.4p-148,
+	false,
+	-0x1.4000000000000000000000000001p-148,
+	-0x1.4p-148,
+	-0x1.4p-148,
+	-0x1.4p-148),
+  TEST ("7.4109846876186981626485318930233205854758970392148714663837"
+	"852375101326090531312779794975454245398856969484704316857659"
+	"638998506553390969459816219401617281718945106978546710679176"
+	"872575177347315553307795408549809608457500958111373034747658"
+	"096871009590975442271004757307809711118935784838675653998783"
+	"503015228055934046593739791790738723868299395818481660169122"
+	"019456499931289798411362062484498678713572180352209017023903"
+	"285791732520220528974020802906854021606612375549983402671300"
+	"035812486479041385743401875520901590172592547146296175134159"
+	"774938718574737870961645638908718119841271673056017045493004"
+	"705269590165763776884908267986972573366521765567941072508764"
+	"337560846003984904972149117463085539556354188641513168478436"
+	"31308023759629577398300170898437499e-324",
+	false,
+	0x0p+0,
+	0x0p+0,
+	0x0p+0,
+	0x8p-152,
+	false,
+	0x4p-1076,
+	0x4p-1076,
+	0x4p-1076,
+	0x8p-1076,
+	false,
+	0x5.fffffffffffffff8p-1076,
+	0x6p-1076,
+	0x5.fffffffffffffff8p-1076,
+	0x6p-1076,
+	false,
+	0x5.fffffffffffffff8p-1076,
+	0x6p-1076,
+	0x5.fffffffffffffff8p-1076,
+	0x6p-1076,
+	false,
+	0x4p-1076,
+	0x4p-1076,
+	0x4p-1076,
+	0x8p-1076,
+	false,
+	0x5.fffffffffffffffffffffffffffcp-1076,
+	0x6p-1076,
+	0x5.fffffffffffffffffffffffffffcp-1076,
+	0x6p-1076),
+  TEST ("7.4109846876186981626485318930233205854758970392148714663837"
+	"852375101326090531312779794975454245398856969484704316857659"
+	"638998506553390969459816219401617281718945106978546710679176"
+	"872575177347315553307795408549809608457500958111373034747658"
+	"096871009590975442271004757307809711118935784838675653998783"
+	"503015228055934046593739791790738723868299395818481660169122"
+	"019456499931289798411362062484498678713572180352209017023903"
+	"285791732520220528974020802906854021606612375549983402671300"
+	"035812486479041385743401875520901590172592547146296175134159"
+	"774938718574737870961645638908718119841271673056017045493004"
+	"705269590165763776884908267986972573366521765567941072508764"
+	"337560846003984904972149117463085539556354188641513168478436"
+	"313080237596295773983001708984375e-324",
+	false,
+	0x0p+0,
+	0x0p+0,
+	0x0p+0,
+	0x8p-152,
+	false,
+	0x4p-1076,
+	0x8p-1076,
+	0x4p-1076,
+	0x8p-1076,
+	true,
+	0x6p-1076,
+	0x6p-1076,
+	0x6p-1076,
+	0x6p-1076,
+	true,
+	0x6p-1076,
+	0x6p-1076,
+	0x6p-1076,
+	0x6p-1076,
+	false,
+	0x4p-1076,
+	0x8p-1076,
+	0x4p-1076,
+	0x8p-1076,
+	true,
+	0x6p-1076,
+	0x6p-1076,
+	0x6p-1076,
+	0x6p-1076),
+  TEST ("7.4109846876186981626485318930233205854758970392148714663837"
+	"852375101326090531312779794975454245398856969484704316857659"
+	"638998506553390969459816219401617281718945106978546710679176"
+	"872575177347315553307795408549809608457500958111373034747658"
+	"096871009590975442271004757307809711118935784838675653998783"
+	"503015228055934046593739791790738723868299395818481660169122"
+	"019456499931289798411362062484498678713572180352209017023903"
+	"285791732520220528974020802906854021606612375549983402671300"
+	"035812486479041385743401875520901590172592547146296175134159"
+	"774938718574737870961645638908718119841271673056017045493004"
+	"705269590165763776884908267986972573366521765567941072508764"
+	"337560846003984904972149117463085539556354188641513168478436"
+	"31308023759629577398300170898437501e-324",
+	false,
+	0x0p+0,
+	0x0p+0,
+	0x0p+0,
+	0x8p-152,
+	false,
+	0x4p-1076,
+	0x8p-1076,
+	0x4p-1076,
+	0x8p-1076,
+	false,
+	0x6p-1076,
+	0x6p-1076,
+	0x6p-1076,
+	0x6.0000000000000008p-1076,
+	false,
+	0x6p-1076,
+	0x6p-1076,
+	0x6p-1076,
+	0x6.0000000000000008p-1076,
+	false,
+	0x4p-1076,
+	0x8p-1076,
+	0x4p-1076,
+	0x8p-1076,
+	false,
+	0x6p-1076,
+	0x6p-1076,
+	0x6p-1076,
+	0x6.0000000000000000000000000004p-1076),
+  TEST ("-7.410984687618698162648531893023320585475897039214871466383"
+	"785237510132609053131277979497545424539885696948470431685765"
+	"963899850655339096945981621940161728171894510697854671067917"
+	"687257517734731555330779540854980960845750095811137303474765"
+	"809687100959097544227100475730780971111893578483867565399878"
+	"350301522805593404659373979179073872386829939581848166016912"
+	"201945649993128979841136206248449867871357218035220901702390"
+	"328579173252022052897402080290685402160661237554998340267130"
+	"003581248647904138574340187552090159017259254714629617513415"
+	"977493871857473787096164563890871811984127167305601704549300"
+	"470526959016576377688490826798697257336652176556794107250876"
+	"433756084600398490497214911746308553955635418864151316847843"
+	"631308023759629577398300170898437499e-324",
+	false,
+	-0x8p-152,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0,
+	false,
+	-0x8p-1076,
+	-0x4p-1076,
+	-0x4p-1076,
+	-0x4p-1076,
+	false,
+	-0x6p-1076,
+	-0x6p-1076,
+	-0x5.fffffffffffffff8p-1076,
+	-0x5.fffffffffffffff8p-1076,
+	false,
+	-0x6p-1076,
+	-0x6p-1076,
+	-0x5.fffffffffffffff8p-1076,
+	-0x5.fffffffffffffff8p-1076,
+	false,
+	-0x8p-1076,
+	-0x4p-1076,
+	-0x4p-1076,
+	-0x4p-1076,
+	false,
+	-0x6p-1076,
+	-0x6p-1076,
+	-0x5.fffffffffffffffffffffffffffcp-1076,
+	-0x5.fffffffffffffffffffffffffffcp-1076),
+  TEST ("-7.410984687618698162648531893023320585475897039214871466383"
+	"785237510132609053131277979497545424539885696948470431685765"
+	"963899850655339096945981621940161728171894510697854671067917"
+	"687257517734731555330779540854980960845750095811137303474765"
+	"809687100959097544227100475730780971111893578483867565399878"
+	"350301522805593404659373979179073872386829939581848166016912"
+	"201945649993128979841136206248449867871357218035220901702390"
+	"328579173252022052897402080290685402160661237554998340267130"
+	"003581248647904138574340187552090159017259254714629617513415"
+	"977493871857473787096164563890871811984127167305601704549300"
+	"470526959016576377688490826798697257336652176556794107250876"
+	"433756084600398490497214911746308553955635418864151316847843"
+	"6313080237596295773983001708984375e-324",
+	false,
+	-0x8p-152,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0,
+	false,
+	-0x8p-1076,
+	-0x8p-1076,
+	-0x4p-1076,
+	-0x4p-1076,
+	true,
+	-0x6p-1076,
+	-0x6p-1076,
+	-0x6p-1076,
+	-0x6p-1076,
+	true,
+	-0x6p-1076,
+	-0x6p-1076,
+	-0x6p-1076,
+	-0x6p-1076,
+	false,
+	-0x8p-1076,
+	-0x8p-1076,
+	-0x4p-1076,
+	-0x4p-1076,
+	true,
+	-0x6p-1076,
+	-0x6p-1076,
+	-0x6p-1076,
+	-0x6p-1076),
+  TEST ("-7.410984687618698162648531893023320585475897039214871466383"
+	"785237510132609053131277979497545424539885696948470431685765"
+	"963899850655339096945981621940161728171894510697854671067917"
+	"687257517734731555330779540854980960845750095811137303474765"
+	"809687100959097544227100475730780971111893578483867565399878"
+	"350301522805593404659373979179073872386829939581848166016912"
+	"201945649993128979841136206248449867871357218035220901702390"
+	"328579173252022052897402080290685402160661237554998340267130"
+	"003581248647904138574340187552090159017259254714629617513415"
+	"977493871857473787096164563890871811984127167305601704549300"
+	"470526959016576377688490826798697257336652176556794107250876"
+	"433756084600398490497214911746308553955635418864151316847843"
+	"631308023759629577398300170898437501e-324",
+	false,
+	-0x8p-152,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0,
+	false,
+	-0x8p-1076,
+	-0x8p-1076,
+	-0x4p-1076,
+	-0x4p-1076,
+	false,
+	-0x6.0000000000000008p-1076,
+	-0x6p-1076,
+	-0x6p-1076,
+	-0x6p-1076,
+	false,
+	-0x6.0000000000000008p-1076,
+	-0x6p-1076,
+	-0x6p-1076,
+	-0x6p-1076,
+	false,
+	-0x8p-1076,
+	-0x8p-1076,
+	-0x4p-1076,
+	-0x4p-1076,
+	false,
+	-0x6.0000000000000000000000000004p-1076,
+	-0x6p-1076,
+	-0x6p-1076,
+	-0x6p-1076),
+  TEST ("5.4677992978237119037926089004291297245985762235403450155814"
+	"707305425575329500966052143410629387408077958710210208052966"
+	"529504784489330482549602621133847135082257338717668975178538"
+	"378957084503396349323438489751160934104796903302909028868611"
+	"999312592165232778075745690821530731336739429587895774023213"
+	"939331012985331912661021188896306095323395084578542200319963"
+	"179359407180003251440084380484161504585462684082946932782829"
+	"488183829817567452314437076943950532707791252404699268678810"
+	"198502871250235796855577909830559749628817599194837522029036"
+	"891995648803056846354520653635957919882905363521007017169741"
+	"463296044392266269433408052686419017699718627761948763856040"
+	"592690841721239300491445991666051031755802326720329666454066"
+	"568630314348735511753639418257984253319063825247065727664852"
+	"328745422305642626091617823968872438962470092440688372515677"
+	"832232712866924800106797113478024083516199991991274936894113"
+	"006233377518471389394984262004503058455485659100090665241525"
+	"454803628182902241401701783637353179296850056973639305945938"
+	"813428953287892593620291195986011128990061888798763718548789"
+	"025717537674780281005583347165047846045925077914824515331335"
+	"131286063574407181821236377907693209224423490663289916878620"
+	"725507793163931390372011875799729330162278748985052557432333"
+	"005334989519381566364065326138465761456173231416844807264090"
+	"741841972247545424908843928136253653308813487994328446248389"
+	"608261444391573619177442907290731163188581917588219420107047"
+	"265367485141413919810885909689112244064797106324295291545892"
+	"937991321479061743491490060940946128274533657682130125169586"
+	"930571899403551122506297763180795732325134340989331155893724"
+	"289358918212707392997768032299997207208451112971425779939507"
+	"837165263255764268971211819536322993221774123134726665579460"
+	"265871378186589562858761835613344584269098062275786969729830"
+	"545786485401407774313414954958161677096004701941411411592755"
+	"485864471870515173326244464631295701572087440183178339987662"
+	"926763241220698078822661709054601073523477544653542795020468"
+	"256078409306409100874886828781860529824879343987945751252081"
+	"314345990313550683792348814627862441324030155730592166581251"
+	"009922787324590431548734575328663628650380722603024383412564"
+	"651446272117561042207738413114131099731016728935023152239431"
+	"311619533848376583687509108453086730196255111695352464186678"
+	"221927564757730319825223049341618853631333478241227227268084"
+	"583396688436229936266854011427192767039363517491659523133852"
+	"472534104124441112346615696891097070121463652258681270378076"
+	"538381697594264658479637863087159293838880752928175545408262"
+	"813403793568695416998388572304528748824756265665683890518422"
+	"696169422338806137532304784682662448207928681740476188343739"
+	"117833525916386815135793034906806117413105008719197882837614"
+	"738262050320291539494104952056471606645482046176634075459021"
+	"552555959590354956262127809953013679512507451424271839221946"
+	"794056861055980558363033732905772356986051180966474116423192"
+	"194741572438649215204229781279620370445373851348786918527399"
+	"785630808242657122705381806661616271132182017797793661244078"
+	"445747547535623384548769818529655539279036503234072455810991"
+	"588075181817695975173110136482659854557506203058080551018873"
+	"203138260451109855100526720073566126209666125604482413705611"
+	"996796777927332827103568863352291499261312290355143742018042"
+	"254470707107847293593205234049774839191754781030496978091006"
+	"099559675240966730110167624903610656473267105556155633783594"
+	"089546261107653110531808279445757724399186120387548675148632"
+	"176049190701680305210224388072261974806791922636412897526952"
+	"793677946622674149577084803568051242934076450942927092705684"
+	"547042915490323112457971853658760725588190377666477106903106"
+	"693847278847646032201293023329503348730723947218797410452333"
+	"910847913892827195814551858335519518939031446093385329182820"
+	"714173657946661746005901866885589732922652604573972842197231"
+	"187365263381958925227970038358064987248233271706462687651143"
+	"350472018043321314534759819524203308490914358596886150053406"
+	"629512434788155355109100540319857813535695923273426256911552"
+	"977539394209918630668466632881929661971212772444625151371953"
+	"428875491139683919687008724010475217255347915698820960215217"
+	"257390308560235323463096946442080548018754166369706161589705"
+	"215873687166365628787796501470056870127729464714362172216802"
+	"441045276911597009443281135389729130222603185665646434661947"
+	"627628077723219376892727386120519287577405410510114936151502"
+	"752997122750262781911372625997223415283516995479265631485799"
+	"456782561734766648462849641064097181818204279498552827825384"
+	"186202065516999362573388136163077477126602169410435905014077"
+	"049808497409025369325795765272066650278004200357878990911374"
+	"982857977108488482528354406313893864211497105765030504600982"
+	"253488805474531798742143374465080240030582370086699167937651"
+	"038307909706139327119325418854546478285735654541635477790346"
+	"964782617354265050767878335230272194896680141986745074630225"
+	"893106573559558843545841186025169531604151588481389164948914"
+	"823593944287133336263680358191369540321930649824471425485137"
+	"777984823525402115151171093313613251350685343824859052220126"
+	"891551966018355920872775724807128769003243129486808733796350"
+	"497668255116485157191011858830643898323628223472099280243583"
+	"164434348347014910398004439821970508280440872759395827943270"
+	"985008769143562351938091476215083548164137333541883808870019"
+	"116234099013452929807950151652297436436006149684939775781234"
+	"660954156154478642694176038524277810483833149798681345708089"
+	"152179193979463169402340611793486272301808073267534612685593"
+	"859596787866884211031341417903391749825320454663508370385251"
+	"831778477311017089729361152161928815389818579983544490982891"
+	"734081131312309744330960666031291451740885503458543884956367"
+	"654943799264600314531815427932691107874782328654759293575803"
+	"481929361961781073958502075438499070633193799699311694287183"
+	"299423475339817655608058724723221867087563064557636112380829"
+	"514501382073257737022472866608244164310385205213523702910787"
+	"182472517125030106491031844871593141759729773907719510044049"
+	"352857426592936763727969496103940591601975078602859660478614"
+	"119405428212830134490731706220583788265344728818766885126977"
+	"588151111984290444321648931907188080336064713873288834096229"
+	"203276676119810521851726133377700616341304257822975788967472"
+	"152742255041912584197045423031298506219011800240120182445838"
+	"590696647416285334515631019799007515682004250060857020904012"
+	"215375170479800482680554499806010766109655061507421747722461"
+	"180617361402575082294678925605271083587897845390768226405648"
+	"508518103525778638618195775128516073959272990148239415346263"
+	"486966573934577450787243667063244378381883115827207605856174"
+	"876350045086885320626669331311880593775916269643646395423220"
+	"549940790476989709243027420158390806135690975149384714684219"
+	"964938182719962913931464979458639185519531490009437619838306"
+	"362365453754807654884704163490469296444427144778593725687358"
+	"437087390151990694667516279202024332494828210657618261952038"
+	"597230263799412584275851667403910657370879707181053365818502"
+	"680037431560091209982641738995652793235851569372314130107647"
+	"166085235615697257094269133100914135783178856280392139325001"
+	"352841718610484616627448189556913621837791650699820323059708"
+	"766420810133584841826718631681683381743511974264126250984214"
+	"812397119978273917903889865891718836792263377888052458189238"
+	"746074986456016681098722869419588274020181430652732817858728"
+	"473849369539367463917171317324882099804999043054467247785592"
+	"038464723442276239896066431580123756428540074945472427752568"
+	"981171400621705853374875885943072600692576914790467205905272"
+	"372594740187988081900317493185005142913607163380720069786786"
+	"782095331840893694073778325119471833528492917081008547303414"
+	"509381563617864195257751546539575461435803625993888325647883"
+	"541039192368366987400263049681218831477776345118518503709588"
+	"840859023379762456561030683928115349942393963185677123055324"
+	"771693784214924931737043793679546051454845624150270955450608"
+	"318747395755728950832754611277041359602301205138509175543313"
+	"522772786504141007552691902249572375175731740923618769197304"
+	"652898352694386665448260033458575323252814233868098279476166"
+	"764258284911434288072243178941698347365985427696983129579496"
+	"059032032841281149923518087084876885114369033227736521245740"
+	"554711771423492719899982357711910225545480424688322195336240"
+	"492253136281857837808491795993788199125205555222116581071134"
+	"476787468430539307909617442106685159519071053844987343666452"
+	"494280317720153567054364117244775141336558406098548803924509"
+	"496052261825198043140272655303625315605326569530252885854991"
+	"822289219201218313590745412010446642247111703901991591338062"
+	"693320157180618736569439969283245279430312651192668788340033"
+	"626825194260296262959884258597703584888770801961209652822982"
+	"322376122303586169861685106043820510444293432856251210395693"
+	"261264867823980172683352796141772210301725997652373804152525"
+	"037162852291403804455997331367378463632437773242905518075065"
+	"414724295857460288225400061608664961649196400079359622673770"
+	"607898395269075056596627116148289491042491764170924014885106"
+	"158235482774778418134123293974436877051995673618683751115353"
+	"808771434984204447736174758316063096245047311279841579995578"
+	"186609402864244042751443128536278453430633423118662852688374"
+	"229600894418958824842459450540826176452145829389286103522774"
+	"101195556029650753254244433565937938526828990893149766298997"
+	"738359913887178888607190765709867052470880785937935110091424"
+	"743449966353497865681753841380246075612094033617488674676296"
+	"822570077027076266879557913673839341012099558043806442348798"
+	"053951239274913334631522409564461770434875790402230022872647"
+	"568436177018658068697071731879399180374560963492726714528729"
+	"224208938589940272515747888379118461617702271694075087419634"
+	"147298076764775745707026934442908236664400557265527951453482"
+	"191684597674273691978253678690951178777239573925410438679099"
+	"374700609973920128201422381329108236575369403675960765238333"
+	"778127017096574296148321075566959285042221837159799800133563"
+	"239963969638610872680393210300180152020613051613414547163713"
+	"772512617757277955979895866367571776456268564191092477027650"
+	"135832200376440239783726540552694851717269598489288851529660"
+	"975027775639565229734596726205832668434979354541943345062977"
+	"891187146561050118118108223323735210843681128615413601091222"
+	"007912350536959777114306541514511332368936078560929788143798"
+	"814391221507522370648646767364209132147312407014953113532379"
+	"838195728491128536978285918066991040993153064356179903885952"
+	"027952713749653604502053512355449916680887234238773855581636"
+	"172479594866871765094513940103284167914110196720261110812716"
+	"776424260154507395050380575452850420730818412994731079307343"
+	"538376880280124019321040198038723558784544408584344466090982"
+	"802067326529000931562048932875469079874956595180595395347093"
+	"285140279165467965596318365749701535812384333240968283640721"
+	"344003442002691613772056762099098025739332715913970186225176"
+	"459563484134139746647940170537900275350480490468851439300771"
+	"949915194703080576611022590670399844931867609777417528903454"
+	"731922206378932141464755402629420074293816349270038351339419"
+	"146768473851353171629153912238797141905920143036064131705230"
+	"421762305232861503856799511155936565169005916711845389135580"
+	"928162511912438531204156138447775120789548666143600293412065"
+	"767167106888509172568003530668539460588248316513392652567856"
+	"224602697296203328920073354425994044956624831346979458846837"
+	"597950064151867164583749203433942592178528868981311575331848"
+	"941597492470436782387502687532649093096498315347403977436001"
+	"399982102030846763698994785054617523241463186980898394504211"
+	"430763617825306895065661536045431497903759118007934839122881"
+	"885863091769469883539876840543521295706315919855784493235603"
+	"866268925981702690270202829595794350800918257913991744455922"
+	"683343374046671669930219650268554687499e-4951",
+	false,
+	0x0p+0,
+	0x0p+0,
+	0x0p+0,
+	0x8p-152,
+	false,
+	0x0p+0,
+	0x0p+0,
+	0x0p+0,
+	0x4p-1076,
+	false,
+	0x8p-16448,
+	0x8p-16448,
+	0x8p-16448,
+	0x1p-16444,
+	false,
+	0x8p-16448,
+	0xcp-16448,
+	0x8p-16448,
+	0xcp-16448,
+	false,
+	0x0p+0,
+	0x0p+0,
+	0x0p+0,
+	0x4p-1076,
+	false,
+	0xb.fffffffffffcp-16448,
+	0xcp-16448,
+	0xb.fffffffffffcp-16448,
+	0xcp-16448),
+  TEST ("5.4677992978237119037926089004291297245985762235403450155814"
+	"707305425575329500966052143410629387408077958710210208052966"
+	"529504784489330482549602621133847135082257338717668975178538"
+	"378957084503396349323438489751160934104796903302909028868611"
+	"999312592165232778075745690821530731336739429587895774023213"
+	"939331012985331912661021188896306095323395084578542200319963"
+	"179359407180003251440084380484161504585462684082946932782829"
+	"488183829817567452314437076943950532707791252404699268678810"
+	"198502871250235796855577909830559749628817599194837522029036"
+	"891995648803056846354520653635957919882905363521007017169741"
+	"463296044392266269433408052686419017699718627761948763856040"
+	"592690841721239300491445991666051031755802326720329666454066"
+	"568630314348735511753639418257984253319063825247065727664852"
+	"328745422305642626091617823968872438962470092440688372515677"
+	"832232712866924800106797113478024083516199991991274936894113"
+	"006233377518471389394984262004503058455485659100090665241525"
+	"454803628182902241401701783637353179296850056973639305945938"
+	"813428953287892593620291195986011128990061888798763718548789"
+	"025717537674780281005583347165047846045925077914824515331335"
+	"131286063574407181821236377907693209224423490663289916878620"
+	"725507793163931390372011875799729330162278748985052557432333"
+	"005334989519381566364065326138465761456173231416844807264090"
+	"741841972247545424908843928136253653308813487994328446248389"
+	"608261444391573619177442907290731163188581917588219420107047"
+	"265367485141413919810885909689112244064797106324295291545892"
+	"937991321479061743491490060940946128274533657682130125169586"
+	"930571899403551122506297763180795732325134340989331155893724"
+	"289358918212707392997768032299997207208451112971425779939507"
+	"837165263255764268971211819536322993221774123134726665579460"
+	"265871378186589562858761835613344584269098062275786969729830"
+	"545786485401407774313414954958161677096004701941411411592755"
+	"485864471870515173326244464631295701572087440183178339987662"
+	"926763241220698078822661709054601073523477544653542795020468"
+	"256078409306409100874886828781860529824879343987945751252081"
+	"314345990313550683792348814627862441324030155730592166581251"
+	"009922787324590431548734575328663628650380722603024383412564"
+	"651446272117561042207738413114131099731016728935023152239431"
+	"311619533848376583687509108453086730196255111695352464186678"
+	"221927564757730319825223049341618853631333478241227227268084"
+	"583396688436229936266854011427192767039363517491659523133852"
+	"472534104124441112346615696891097070121463652258681270378076"
+	"538381697594264658479637863087159293838880752928175545408262"
+	"813403793568695416998388572304528748824756265665683890518422"
+	"696169422338806137532304784682662448207928681740476188343739"
+	"117833525916386815135793034906806117413105008719197882837614"
+	"738262050320291539494104952056471606645482046176634075459021"
+	"552555959590354956262127809953013679512507451424271839221946"
+	"794056861055980558363033732905772356986051180966474116423192"
+	"194741572438649215204229781279620370445373851348786918527399"
+	"785630808242657122705381806661616271132182017797793661244078"
+	"445747547535623384548769818529655539279036503234072455810991"
+	"588075181817695975173110136482659854557506203058080551018873"
+	"203138260451109855100526720073566126209666125604482413705611"
+	"996796777927332827103568863352291499261312290355143742018042"
+	"254470707107847293593205234049774839191754781030496978091006"
+	"099559675240966730110167624903610656473267105556155633783594"
+	"089546261107653110531808279445757724399186120387548675148632"
+	"176049190701680305210224388072261974806791922636412897526952"
+	"793677946622674149577084803568051242934076450942927092705684"
+	"547042915490323112457971853658760725588190377666477106903106"
+	"693847278847646032201293023329503348730723947218797410452333"
+	"910847913892827195814551858335519518939031446093385329182820"
+	"714173657946661746005901866885589732922652604573972842197231"
+	"187365263381958925227970038358064987248233271706462687651143"
+	"350472018043321314534759819524203308490914358596886150053406"
+	"629512434788155355109100540319857813535695923273426256911552"
+	"977539394209918630668466632881929661971212772444625151371953"
+	"428875491139683919687008724010475217255347915698820960215217"
+	"257390308560235323463096946442080548018754166369706161589705"
+	"215873687166365628787796501470056870127729464714362172216802"
+	"441045276911597009443281135389729130222603185665646434661947"
+	"627628077723219376892727386120519287577405410510114936151502"
+	"752997122750262781911372625997223415283516995479265631485799"
+	"456782561734766648462849641064097181818204279498552827825384"
+	"186202065516999362573388136163077477126602169410435905014077"
+	"049808497409025369325795765272066650278004200357878990911374"
+	"982857977108488482528354406313893864211497105765030504600982"
+	"253488805474531798742143374465080240030582370086699167937651"
+	"038307909706139327119325418854546478285735654541635477790346"
+	"964782617354265050767878335230272194896680141986745074630225"
+	"893106573559558843545841186025169531604151588481389164948914"
+	"823593944287133336263680358191369540321930649824471425485137"
+	"777984823525402115151171093313613251350685343824859052220126"
+	"891551966018355920872775724807128769003243129486808733796350"
+	"497668255116485157191011858830643898323628223472099280243583"
+	"164434348347014910398004439821970508280440872759395827943270"
+	"985008769143562351938091476215083548164137333541883808870019"
+	"116234099013452929807950151652297436436006149684939775781234"
+	"660954156154478642694176038524277810483833149798681345708089"
+	"152179193979463169402340611793486272301808073267534612685593"
+	"859596787866884211031341417903391749825320454663508370385251"
+	"831778477311017089729361152161928815389818579983544490982891"
+	"734081131312309744330960666031291451740885503458543884956367"
+	"654943799264600314531815427932691107874782328654759293575803"
+	"481929361961781073958502075438499070633193799699311694287183"
+	"299423475339817655608058724723221867087563064557636112380829"
+	"514501382073257737022472866608244164310385205213523702910787"
+	"182472517125030106491031844871593141759729773907719510044049"
+	"352857426592936763727969496103940591601975078602859660478614"
+	"119405428212830134490731706220583788265344728818766885126977"
+	"588151111984290444321648931907188080336064713873288834096229"
+	"203276676119810521851726133377700616341304257822975788967472"
+	"152742255041912584197045423031298506219011800240120182445838"
+	"590696647416285334515631019799007515682004250060857020904012"
+	"215375170479800482680554499806010766109655061507421747722461"
+	"180617361402575082294678925605271083587897845390768226405648"
+	"508518103525778638618195775128516073959272990148239415346263"
+	"486966573934577450787243667063244378381883115827207605856174"
+	"876350045086885320626669331311880593775916269643646395423220"
+	"549940790476989709243027420158390806135690975149384714684219"
+	"964938182719962913931464979458639185519531490009437619838306"
+	"362365453754807654884704163490469296444427144778593725687358"
+	"437087390151990694667516279202024332494828210657618261952038"
+	"597230263799412584275851667403910657370879707181053365818502"
+	"680037431560091209982641738995652793235851569372314130107647"
+	"166085235615697257094269133100914135783178856280392139325001"
+	"352841718610484616627448189556913621837791650699820323059708"
+	"766420810133584841826718631681683381743511974264126250984214"
+	"812397119978273917903889865891718836792263377888052458189238"
+	"746074986456016681098722869419588274020181430652732817858728"
+	"473849369539367463917171317324882099804999043054467247785592"
+	"038464723442276239896066431580123756428540074945472427752568"
+	"981171400621705853374875885943072600692576914790467205905272"
+	"372594740187988081900317493185005142913607163380720069786786"
+	"782095331840893694073778325119471833528492917081008547303414"
+	"509381563617864195257751546539575461435803625993888325647883"
+	"541039192368366987400263049681218831477776345118518503709588"
+	"840859023379762456561030683928115349942393963185677123055324"
+	"771693784214924931737043793679546051454845624150270955450608"
+	"318747395755728950832754611277041359602301205138509175543313"
+	"522772786504141007552691902249572375175731740923618769197304"
+	"652898352694386665448260033458575323252814233868098279476166"
+	"764258284911434288072243178941698347365985427696983129579496"
+	"059032032841281149923518087084876885114369033227736521245740"
+	"554711771423492719899982357711910225545480424688322195336240"
+	"492253136281857837808491795993788199125205555222116581071134"
+	"476787468430539307909617442106685159519071053844987343666452"
+	"494280317720153567054364117244775141336558406098548803924509"
+	"496052261825198043140272655303625315605326569530252885854991"
+	"822289219201218313590745412010446642247111703901991591338062"
+	"693320157180618736569439969283245279430312651192668788340033"
+	"626825194260296262959884258597703584888770801961209652822982"
+	"322376122303586169861685106043820510444293432856251210395693"
+	"261264867823980172683352796141772210301725997652373804152525"
+	"037162852291403804455997331367378463632437773242905518075065"
+	"414724295857460288225400061608664961649196400079359622673770"
+	"607898395269075056596627116148289491042491764170924014885106"
+	"158235482774778418134123293974436877051995673618683751115353"
+	"808771434984204447736174758316063096245047311279841579995578"
+	"186609402864244042751443128536278453430633423118662852688374"
+	"229600894418958824842459450540826176452145829389286103522774"
+	"101195556029650753254244433565937938526828990893149766298997"
+	"738359913887178888607190765709867052470880785937935110091424"
+	"743449966353497865681753841380246075612094033617488674676296"
+	"822570077027076266879557913673839341012099558043806442348798"
+	"053951239274913334631522409564461770434875790402230022872647"
+	"568436177018658068697071731879399180374560963492726714528729"
+	"224208938589940272515747888379118461617702271694075087419634"
+	"147298076764775745707026934442908236664400557265527951453482"
+	"191684597674273691978253678690951178777239573925410438679099"
+	"374700609973920128201422381329108236575369403675960765238333"
+	"778127017096574296148321075566959285042221837159799800133563"
+	"239963969638610872680393210300180152020613051613414547163713"
+	"772512617757277955979895866367571776456268564191092477027650"
+	"135832200376440239783726540552694851717269598489288851529660"
+	"975027775639565229734596726205832668434979354541943345062977"
+	"891187146561050118118108223323735210843681128615413601091222"
+	"007912350536959777114306541514511332368936078560929788143798"
+	"814391221507522370648646767364209132147312407014953113532379"
+	"838195728491128536978285918066991040993153064356179903885952"
+	"027952713749653604502053512355449916680887234238773855581636"
+	"172479594866871765094513940103284167914110196720261110812716"
+	"776424260154507395050380575452850420730818412994731079307343"
+	"538376880280124019321040198038723558784544408584344466090982"
+	"802067326529000931562048932875469079874956595180595395347093"
+	"285140279165467965596318365749701535812384333240968283640721"
+	"344003442002691613772056762099098025739332715913970186225176"
+	"459563484134139746647940170537900275350480490468851439300771"
+	"949915194703080576611022590670399844931867609777417528903454"
+	"731922206378932141464755402629420074293816349270038351339419"
+	"146768473851353171629153912238797141905920143036064131705230"
+	"421762305232861503856799511155936565169005916711845389135580"
+	"928162511912438531204156138447775120789548666143600293412065"
+	"767167106888509172568003530668539460588248316513392652567856"
+	"224602697296203328920073354425994044956624831346979458846837"
+	"597950064151867164583749203433942592178528868981311575331848"
+	"941597492470436782387502687532649093096498315347403977436001"
+	"399982102030846763698994785054617523241463186980898394504211"
+	"430763617825306895065661536045431497903759118007934839122881"
+	"885863091769469883539876840543521295706315919855784493235603"
+	"866268925981702690270202829595794350800918257913991744455922"
+	"6833433740466716699302196502685546875e-4951",
+	false,
+	0x0p+0,
+	0x0p+0,
+	0x0p+0,
+	0x8p-152,
+	false,
+	0x0p+0,
+	0x0p+0,
+	0x0p+0,
+	0x4p-1076,
+	false,
+	0x8p-16448,
+	0x1p-16444,
+	0x8p-16448,
+	0x1p-16444,
+	true,
+	0xcp-16448,
+	0xcp-16448,
+	0xcp-16448,
+	0xcp-16448,
+	false,
+	0x0p+0,
+	0x0p+0,
+	0x0p+0,
+	0x4p-1076,
+	true,
+	0xcp-16448,
+	0xcp-16448,
+	0xcp-16448,
+	0xcp-16448),
+  TEST ("5.4677992978237119037926089004291297245985762235403450155814"
+	"707305425575329500966052143410629387408077958710210208052966"
+	"529504784489330482549602621133847135082257338717668975178538"
+	"378957084503396349323438489751160934104796903302909028868611"
+	"999312592165232778075745690821530731336739429587895774023213"
+	"939331012985331912661021188896306095323395084578542200319963"
+	"179359407180003251440084380484161504585462684082946932782829"
+	"488183829817567452314437076943950532707791252404699268678810"
+	"198502871250235796855577909830559749628817599194837522029036"
+	"891995648803056846354520653635957919882905363521007017169741"
+	"463296044392266269433408052686419017699718627761948763856040"
+	"592690841721239300491445991666051031755802326720329666454066"
+	"568630314348735511753639418257984253319063825247065727664852"
+	"328745422305642626091617823968872438962470092440688372515677"
+	"832232712866924800106797113478024083516199991991274936894113"
+	"006233377518471389394984262004503058455485659100090665241525"
+	"454803628182902241401701783637353179296850056973639305945938"
+	"813428953287892593620291195986011128990061888798763718548789"
+	"025717537674780281005583347165047846045925077914824515331335"
+	"131286063574407181821236377907693209224423490663289916878620"
+	"725507793163931390372011875799729330162278748985052557432333"
+	"005334989519381566364065326138465761456173231416844807264090"
+	"741841972247545424908843928136253653308813487994328446248389"
+	"608261444391573619177442907290731163188581917588219420107047"
+	"265367485141413919810885909689112244064797106324295291545892"
+	"937991321479061743491490060940946128274533657682130125169586"
+	"930571899403551122506297763180795732325134340989331155893724"
+	"289358918212707392997768032299997207208451112971425779939507"
+	"837165263255764268971211819536322993221774123134726665579460"
+	"265871378186589562858761835613344584269098062275786969729830"
+	"545786485401407774313414954958161677096004701941411411592755"
+	"485864471870515173326244464631295701572087440183178339987662"
+	"926763241220698078822661709054601073523477544653542795020468"
+	"256078409306409100874886828781860529824879343987945751252081"
+	"314345990313550683792348814627862441324030155730592166581251"
+	"009922787324590431548734575328663628650380722603024383412564"
+	"651446272117561042207738413114131099731016728935023152239431"
+	"311619533848376583687509108453086730196255111695352464186678"
+	"221927564757730319825223049341618853631333478241227227268084"
+	"583396688436229936266854011427192767039363517491659523133852"
+	"472534104124441112346615696891097070121463652258681270378076"
+	"538381697594264658479637863087159293838880752928175545408262"
+	"813403793568695416998388572304528748824756265665683890518422"
+	"696169422338806137532304784682662448207928681740476188343739"
+	"117833525916386815135793034906806117413105008719197882837614"
+	"738262050320291539494104952056471606645482046176634075459021"
+	"552555959590354956262127809953013679512507451424271839221946"
+	"794056861055980558363033732905772356986051180966474116423192"
+	"194741572438649215204229781279620370445373851348786918527399"
+	"785630808242657122705381806661616271132182017797793661244078"
+	"445747547535623384548769818529655539279036503234072455810991"
+	"588075181817695975173110136482659854557506203058080551018873"
+	"203138260451109855100526720073566126209666125604482413705611"
+	"996796777927332827103568863352291499261312290355143742018042"
+	"254470707107847293593205234049774839191754781030496978091006"
+	"099559675240966730110167624903610656473267105556155633783594"
+	"089546261107653110531808279445757724399186120387548675148632"
+	"176049190701680305210224388072261974806791922636412897526952"
+	"793677946622674149577084803568051242934076450942927092705684"
+	"547042915490323112457971853658760725588190377666477106903106"
+	"693847278847646032201293023329503348730723947218797410452333"
+	"910847913892827195814551858335519518939031446093385329182820"
+	"714173657946661746005901866885589732922652604573972842197231"
+	"187365263381958925227970038358064987248233271706462687651143"
+	"350472018043321314534759819524203308490914358596886150053406"
+	"629512434788155355109100540319857813535695923273426256911552"
+	"977539394209918630668466632881929661971212772444625151371953"
+	"428875491139683919687008724010475217255347915698820960215217"
+	"257390308560235323463096946442080548018754166369706161589705"
+	"215873687166365628787796501470056870127729464714362172216802"
+	"441045276911597009443281135389729130222603185665646434661947"
+	"627628077723219376892727386120519287577405410510114936151502"
+	"752997122750262781911372625997223415283516995479265631485799"
+	"456782561734766648462849641064097181818204279498552827825384"
+	"186202065516999362573388136163077477126602169410435905014077"
+	"049808497409025369325795765272066650278004200357878990911374"
+	"982857977108488482528354406313893864211497105765030504600982"
+	"253488805474531798742143374465080240030582370086699167937651"
+	"038307909706139327119325418854546478285735654541635477790346"
+	"964782617354265050767878335230272194896680141986745074630225"
+	"893106573559558843545841186025169531604151588481389164948914"
+	"823593944287133336263680358191369540321930649824471425485137"
+	"777984823525402115151171093313613251350685343824859052220126"
+	"891551966018355920872775724807128769003243129486808733796350"
+	"497668255116485157191011858830643898323628223472099280243583"
+	"164434348347014910398004439821970508280440872759395827943270"
+	"985008769143562351938091476215083548164137333541883808870019"
+	"116234099013452929807950151652297436436006149684939775781234"
+	"660954156154478642694176038524277810483833149798681345708089"
+	"152179193979463169402340611793486272301808073267534612685593"
+	"859596787866884211031341417903391749825320454663508370385251"
+	"831778477311017089729361152161928815389818579983544490982891"
+	"734081131312309744330960666031291451740885503458543884956367"
+	"654943799264600314531815427932691107874782328654759293575803"
+	"481929361961781073958502075438499070633193799699311694287183"
+	"299423475339817655608058724723221867087563064557636112380829"
+	"514501382073257737022472866608244164310385205213523702910787"
+	"182472517125030106491031844871593141759729773907719510044049"
+	"352857426592936763727969496103940591601975078602859660478614"
+	"119405428212830134490731706220583788265344728818766885126977"
+	"588151111984290444321648931907188080336064713873288834096229"
+	"203276676119810521851726133377700616341304257822975788967472"
+	"152742255041912584197045423031298506219011800240120182445838"
+	"590696647416285334515631019799007515682004250060857020904012"
+	"215375170479800482680554499806010766109655061507421747722461"
+	"180617361402575082294678925605271083587897845390768226405648"
+	"508518103525778638618195775128516073959272990148239415346263"
+	"486966573934577450787243667063244378381883115827207605856174"
+	"876350045086885320626669331311880593775916269643646395423220"
+	"549940790476989709243027420158390806135690975149384714684219"
+	"964938182719962913931464979458639185519531490009437619838306"
+	"362365453754807654884704163490469296444427144778593725687358"
+	"437087390151990694667516279202024332494828210657618261952038"
+	"597230263799412584275851667403910657370879707181053365818502"
+	"680037431560091209982641738995652793235851569372314130107647"
+	"166085235615697257094269133100914135783178856280392139325001"
+	"352841718610484616627448189556913621837791650699820323059708"
+	"766420810133584841826718631681683381743511974264126250984214"
+	"812397119978273917903889865891718836792263377888052458189238"
+	"746074986456016681098722869419588274020181430652732817858728"
+	"473849369539367463917171317324882099804999043054467247785592"
+	"038464723442276239896066431580123756428540074945472427752568"
+	"981171400621705853374875885943072600692576914790467205905272"
+	"372594740187988081900317493185005142913607163380720069786786"
+	"782095331840893694073778325119471833528492917081008547303414"
+	"509381563617864195257751546539575461435803625993888325647883"
+	"541039192368366987400263049681218831477776345118518503709588"
+	"840859023379762456561030683928115349942393963185677123055324"
+	"771693784214924931737043793679546051454845624150270955450608"
+	"318747395755728950832754611277041359602301205138509175543313"
+	"522772786504141007552691902249572375175731740923618769197304"
+	"652898352694386665448260033458575323252814233868098279476166"
+	"764258284911434288072243178941698347365985427696983129579496"
+	"059032032841281149923518087084876885114369033227736521245740"
+	"554711771423492719899982357711910225545480424688322195336240"
+	"492253136281857837808491795993788199125205555222116581071134"
+	"476787468430539307909617442106685159519071053844987343666452"
+	"494280317720153567054364117244775141336558406098548803924509"
+	"496052261825198043140272655303625315605326569530252885854991"
+	"822289219201218313590745412010446642247111703901991591338062"
+	"693320157180618736569439969283245279430312651192668788340033"
+	"626825194260296262959884258597703584888770801961209652822982"
+	"322376122303586169861685106043820510444293432856251210395693"
+	"261264867823980172683352796141772210301725997652373804152525"
+	"037162852291403804455997331367378463632437773242905518075065"
+	"414724295857460288225400061608664961649196400079359622673770"
+	"607898395269075056596627116148289491042491764170924014885106"
+	"158235482774778418134123293974436877051995673618683751115353"
+	"808771434984204447736174758316063096245047311279841579995578"
+	"186609402864244042751443128536278453430633423118662852688374"
+	"229600894418958824842459450540826176452145829389286103522774"
+	"101195556029650753254244433565937938526828990893149766298997"
+	"738359913887178888607190765709867052470880785937935110091424"
+	"743449966353497865681753841380246075612094033617488674676296"
+	"822570077027076266879557913673839341012099558043806442348798"
+	"053951239274913334631522409564461770434875790402230022872647"
+	"568436177018658068697071731879399180374560963492726714528729"
+	"224208938589940272515747888379118461617702271694075087419634"
+	"147298076764775745707026934442908236664400557265527951453482"
+	"191684597674273691978253678690951178777239573925410438679099"
+	"374700609973920128201422381329108236575369403675960765238333"
+	"778127017096574296148321075566959285042221837159799800133563"
+	"239963969638610872680393210300180152020613051613414547163713"
+	"772512617757277955979895866367571776456268564191092477027650"
+	"135832200376440239783726540552694851717269598489288851529660"
+	"975027775639565229734596726205832668434979354541943345062977"
+	"891187146561050118118108223323735210843681128615413601091222"
+	"007912350536959777114306541514511332368936078560929788143798"
+	"814391221507522370648646767364209132147312407014953113532379"
+	"838195728491128536978285918066991040993153064356179903885952"
+	"027952713749653604502053512355449916680887234238773855581636"
+	"172479594866871765094513940103284167914110196720261110812716"
+	"776424260154507395050380575452850420730818412994731079307343"
+	"538376880280124019321040198038723558784544408584344466090982"
+	"802067326529000931562048932875469079874956595180595395347093"
+	"285140279165467965596318365749701535812384333240968283640721"
+	"344003442002691613772056762099098025739332715913970186225176"
+	"459563484134139746647940170537900275350480490468851439300771"
+	"949915194703080576611022590670399844931867609777417528903454"
+	"731922206378932141464755402629420074293816349270038351339419"
+	"146768473851353171629153912238797141905920143036064131705230"
+	"421762305232861503856799511155936565169005916711845389135580"
+	"928162511912438531204156138447775120789548666143600293412065"
+	"767167106888509172568003530668539460588248316513392652567856"
+	"224602697296203328920073354425994044956624831346979458846837"
+	"597950064151867164583749203433942592178528868981311575331848"
+	"941597492470436782387502687532649093096498315347403977436001"
+	"399982102030846763698994785054617523241463186980898394504211"
+	"430763617825306895065661536045431497903759118007934839122881"
+	"885863091769469883539876840543521295706315919855784493235603"
+	"866268925981702690270202829595794350800918257913991744455922"
+	"683343374046671669930219650268554687501e-4951",
+	false,
+	0x0p+0,
+	0x0p+0,
+	0x0p+0,
+	0x8p-152,
+	false,
+	0x0p+0,
+	0x0p+0,
+	0x0p+0,
+	0x4p-1076,
+	false,
+	0x8p-16448,
+	0x1p-16444,
+	0x8p-16448,
+	0x1p-16444,
+	false,
+	0xcp-16448,
+	0xcp-16448,
+	0xcp-16448,
+	0x1p-16444,
+	false,
+	0x0p+0,
+	0x0p+0,
+	0x0p+0,
+	0x4p-1076,
+	false,
+	0xcp-16448,
+	0xcp-16448,
+	0xcp-16448,
+	0xc.000000000004p-16448),
+  TEST ("-5.467799297823711903792608900429129724598576223540345015581"
+	"470730542557532950096605214341062938740807795871021020805296"
+	"652950478448933048254960262113384713508225733871766897517853"
+	"837895708450339634932343848975116093410479690330290902886861"
+	"199931259216523277807574569082153073133673942958789577402321"
+	"393933101298533191266102118889630609532339508457854220031996"
+	"317935940718000325144008438048416150458546268408294693278282"
+	"948818382981756745231443707694395053270779125240469926867881"
+	"019850287125023579685557790983055974962881759919483752202903"
+	"689199564880305684635452065363595791988290536352100701716974"
+	"146329604439226626943340805268641901769971862776194876385604"
+	"059269084172123930049144599166605103175580232672032966645406"
+	"656863031434873551175363941825798425331906382524706572766485"
+	"232874542230564262609161782396887243896247009244068837251567"
+	"783223271286692480010679711347802408351619999199127493689411"
+	"300623337751847138939498426200450305845548565910009066524152"
+	"545480362818290224140170178363735317929685005697363930594593"
+	"881342895328789259362029119598601112899006188879876371854878"
+	"902571753767478028100558334716504784604592507791482451533133"
+	"513128606357440718182123637790769320922442349066328991687862"
+	"072550779316393139037201187579972933016227874898505255743233"
+	"300533498951938156636406532613846576145617323141684480726409"
+	"074184197224754542490884392813625365330881348799432844624838"
+	"960826144439157361917744290729073116318858191758821942010704"
+	"726536748514141391981088590968911224406479710632429529154589"
+	"293799132147906174349149006094094612827453365768213012516958"
+	"693057189940355112250629776318079573232513434098933115589372"
+	"428935891821270739299776803229999720720845111297142577993950"
+	"783716526325576426897121181953632299322177412313472666557946"
+	"026587137818658956285876183561334458426909806227578696972983"
+	"054578648540140777431341495495816167709600470194141141159275"
+	"548586447187051517332624446463129570157208744018317833998766"
+	"292676324122069807882266170905460107352347754465354279502046"
+	"825607840930640910087488682878186052982487934398794575125208"
+	"131434599031355068379234881462786244132403015573059216658125"
+	"100992278732459043154873457532866362865038072260302438341256"
+	"465144627211756104220773841311413109973101672893502315223943"
+	"131161953384837658368750910845308673019625511169535246418667"
+	"822192756475773031982522304934161885363133347824122722726808"
+	"458339668843622993626685401142719276703936351749165952313385"
+	"247253410412444111234661569689109707012146365225868127037807"
+	"653838169759426465847963786308715929383888075292817554540826"
+	"281340379356869541699838857230452874882475626566568389051842"
+	"269616942233880613753230478468266244820792868174047618834373"
+	"911783352591638681513579303490680611741310500871919788283761"
+	"473826205032029153949410495205647160664548204617663407545902"
+	"155255595959035495626212780995301367951250745142427183922194"
+	"679405686105598055836303373290577235698605118096647411642319"
+	"219474157243864921520422978127962037044537385134878691852739"
+	"978563080824265712270538180666161627113218201779779366124407"
+	"844574754753562338454876981852965553927903650323407245581099"
+	"158807518181769597517311013648265985455750620305808055101887"
+	"320313826045110985510052672007356612620966612560448241370561"
+	"199679677792733282710356886335229149926131229035514374201804"
+	"225447070710784729359320523404977483919175478103049697809100"
+	"609955967524096673011016762490361065647326710555615563378359"
+	"408954626110765311053180827944575772439918612038754867514863"
+	"217604919070168030521022438807226197480679192263641289752695"
+	"279367794662267414957708480356805124293407645094292709270568"
+	"454704291549032311245797185365876072558819037766647710690310"
+	"669384727884764603220129302332950334873072394721879741045233"
+	"391084791389282719581455185833551951893903144609338532918282"
+	"071417365794666174600590186688558973292265260457397284219723"
+	"118736526338195892522797003835806498724823327170646268765114"
+	"335047201804332131453475981952420330849091435859688615005340"
+	"662951243478815535510910054031985781353569592327342625691155"
+	"297753939420991863066846663288192966197121277244462515137195"
+	"342887549113968391968700872401047521725534791569882096021521"
+	"725739030856023532346309694644208054801875416636970616158970"
+	"521587368716636562878779650147005687012772946471436217221680"
+	"244104527691159700944328113538972913022260318566564643466194"
+	"762762807772321937689272738612051928757740541051011493615150"
+	"275299712275026278191137262599722341528351699547926563148579"
+	"945678256173476664846284964106409718181820427949855282782538"
+	"418620206551699936257338813616307747712660216941043590501407"
+	"704980849740902536932579576527206665027800420035787899091137"
+	"498285797710848848252835440631389386421149710576503050460098"
+	"225348880547453179874214337446508024003058237008669916793765"
+	"103830790970613932711932541885454647828573565454163547779034"
+	"696478261735426505076787833523027219489668014198674507463022"
+	"589310657355955884354584118602516953160415158848138916494891"
+	"482359394428713333626368035819136954032193064982447142548513"
+	"777798482352540211515117109331361325135068534382485905222012"
+	"689155196601835592087277572480712876900324312948680873379635"
+	"049766825511648515719101185883064389832362822347209928024358"
+	"316443434834701491039800443982197050828044087275939582794327"
+	"098500876914356235193809147621508354816413733354188380887001"
+	"911623409901345292980795015165229743643600614968493977578123"
+	"466095415615447864269417603852427781048383314979868134570808"
+	"915217919397946316940234061179348627230180807326753461268559"
+	"385959678786688421103134141790339174982532045466350837038525"
+	"183177847731101708972936115216192881538981857998354449098289"
+	"173408113131230974433096066603129145174088550345854388495636"
+	"765494379926460031453181542793269110787478232865475929357580"
+	"348192936196178107395850207543849907063319379969931169428718"
+	"329942347533981765560805872472322186708756306455763611238082"
+	"951450138207325773702247286660824416431038520521352370291078"
+	"718247251712503010649103184487159314175972977390771951004404"
+	"935285742659293676372796949610394059160197507860285966047861"
+	"411940542821283013449073170622058378826534472881876688512697"
+	"758815111198429044432164893190718808033606471387328883409622"
+	"920327667611981052185172613337770061634130425782297578896747"
+	"215274225504191258419704542303129850621901180024012018244583"
+	"859069664741628533451563101979900751568200425006085702090401"
+	"221537517047980048268055449980601076610965506150742174772246"
+	"118061736140257508229467892560527108358789784539076822640564"
+	"850851810352577863861819577512851607395927299014823941534626"
+	"348696657393457745078724366706324437838188311582720760585617"
+	"487635004508688532062666933131188059377591626964364639542322"
+	"054994079047698970924302742015839080613569097514938471468421"
+	"996493818271996291393146497945863918551953149000943761983830"
+	"636236545375480765488470416349046929644442714477859372568735"
+	"843708739015199069466751627920202433249482821065761826195203"
+	"859723026379941258427585166740391065737087970718105336581850"
+	"268003743156009120998264173899565279323585156937231413010764"
+	"716608523561569725709426913310091413578317885628039213932500"
+	"135284171861048461662744818955691362183779165069982032305970"
+	"876642081013358484182671863168168338174351197426412625098421"
+	"481239711997827391790388986589171883679226337788805245818923"
+	"874607498645601668109872286941958827402018143065273281785872"
+	"847384936953936746391717131732488209980499904305446724778559"
+	"203846472344227623989606643158012375642854007494547242775256"
+	"898117140062170585337487588594307260069257691479046720590527"
+	"237259474018798808190031749318500514291360716338072006978678"
+	"678209533184089369407377832511947183352849291708100854730341"
+	"450938156361786419525775154653957546143580362599388832564788"
+	"354103919236836698740026304968121883147777634511851850370958"
+	"884085902337976245656103068392811534994239396318567712305532"
+	"477169378421492493173704379367954605145484562415027095545060"
+	"831874739575572895083275461127704135960230120513850917554331"
+	"352277278650414100755269190224957237517573174092361876919730"
+	"465289835269438666544826003345857532325281423386809827947616"
+	"676425828491143428807224317894169834736598542769698312957949"
+	"605903203284128114992351808708487688511436903322773652124574"
+	"055471177142349271989998235771191022554548042468832219533624"
+	"049225313628185783780849179599378819912520555522211658107113"
+	"447678746843053930790961744210668515951907105384498734366645"
+	"249428031772015356705436411724477514133655840609854880392450"
+	"949605226182519804314027265530362531560532656953025288585499"
+	"182228921920121831359074541201044664224711170390199159133806"
+	"269332015718061873656943996928324527943031265119266878834003"
+	"362682519426029626295988425859770358488877080196120965282298"
+	"232237612230358616986168510604382051044429343285625121039569"
+	"326126486782398017268335279614177221030172599765237380415252"
+	"503716285229140380445599733136737846363243777324290551807506"
+	"541472429585746028822540006160866496164919640007935962267377"
+	"060789839526907505659662711614828949104249176417092401488510"
+	"615823548277477841813412329397443687705199567361868375111535"
+	"380877143498420444773617475831606309624504731127984157999557"
+	"818660940286424404275144312853627845343063342311866285268837"
+	"422960089441895882484245945054082617645214582938928610352277"
+	"410119555602965075325424443356593793852682899089314976629899"
+	"773835991388717888860719076570986705247088078593793511009142"
+	"474344996635349786568175384138024607561209403361748867467629"
+	"682257007702707626687955791367383934101209955804380644234879"
+	"805395123927491333463152240956446177043487579040223002287264"
+	"756843617701865806869707173187939918037456096349272671452872"
+	"922420893858994027251574788837911846161770227169407508741963"
+	"414729807676477574570702693444290823666440055726552795145348"
+	"219168459767427369197825367869095117877723957392541043867909"
+	"937470060997392012820142238132910823657536940367596076523833"
+	"377812701709657429614832107556695928504222183715979980013356"
+	"323996396963861087268039321030018015202061305161341454716371"
+	"377251261775727795597989586636757177645626856419109247702765"
+	"013583220037644023978372654055269485171726959848928885152966"
+	"097502777563956522973459672620583266843497935454194334506297"
+	"789118714656105011811810822332373521084368112861541360109122"
+	"200791235053695977711430654151451133236893607856092978814379"
+	"881439122150752237064864676736420913214731240701495311353237"
+	"983819572849112853697828591806699104099315306435617990388595"
+	"202795271374965360450205351235544991668088723423877385558163"
+	"617247959486687176509451394010328416791411019672026111081271"
+	"677642426015450739505038057545285042073081841299473107930734"
+	"353837688028012401932104019803872355878454440858434446609098"
+	"280206732652900093156204893287546907987495659518059539534709"
+	"328514027916546796559631836574970153581238433324096828364072"
+	"134400344200269161377205676209909802573933271591397018622517"
+	"645956348413413974664794017053790027535048049046885143930077"
+	"194991519470308057661102259067039984493186760977741752890345"
+	"473192220637893214146475540262942007429381634927003835133941"
+	"914676847385135317162915391223879714190592014303606413170523"
+	"042176230523286150385679951115593656516900591671184538913558"
+	"092816251191243853120415613844777512078954866614360029341206"
+	"576716710688850917256800353066853946058824831651339265256785"
+	"622460269729620332892007335442599404495662483134697945884683"
+	"759795006415186716458374920343394259217852886898131157533184"
+	"894159749247043678238750268753264909309649831534740397743600"
+	"139998210203084676369899478505461752324146318698089839450421"
+	"143076361782530689506566153604543149790375911800793483912288"
+	"188586309176946988353987684054352129570631591985578449323560"
+	"386626892598170269027020282959579435080091825791399174445592"
+	"2683343374046671669930219650268554687499e-4951",
+	false,
+	-0x8p-152,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0,
+	false,
+	-0x4p-1076,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0,
+	false,
+	-0x1p-16444,
+	-0x8p-16448,
+	-0x8p-16448,
+	-0x8p-16448,
+	false,
+	-0xcp-16448,
+	-0xcp-16448,
+	-0x8p-16448,
+	-0x8p-16448,
+	false,
+	-0x4p-1076,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0,
+	false,
+	-0xcp-16448,
+	-0xcp-16448,
+	-0xb.fffffffffffcp-16448,
+	-0xb.fffffffffffcp-16448),
+  TEST ("-5.467799297823711903792608900429129724598576223540345015581"
+	"470730542557532950096605214341062938740807795871021020805296"
+	"652950478448933048254960262113384713508225733871766897517853"
+	"837895708450339634932343848975116093410479690330290902886861"
+	"199931259216523277807574569082153073133673942958789577402321"
+	"393933101298533191266102118889630609532339508457854220031996"
+	"317935940718000325144008438048416150458546268408294693278282"
+	"948818382981756745231443707694395053270779125240469926867881"
+	"019850287125023579685557790983055974962881759919483752202903"
+	"689199564880305684635452065363595791988290536352100701716974"
+	"146329604439226626943340805268641901769971862776194876385604"
+	"059269084172123930049144599166605103175580232672032966645406"
+	"656863031434873551175363941825798425331906382524706572766485"
+	"232874542230564262609161782396887243896247009244068837251567"
+	"783223271286692480010679711347802408351619999199127493689411"
+	"300623337751847138939498426200450305845548565910009066524152"
+	"545480362818290224140170178363735317929685005697363930594593"
+	"881342895328789259362029119598601112899006188879876371854878"
+	"902571753767478028100558334716504784604592507791482451533133"
+	"513128606357440718182123637790769320922442349066328991687862"
+	"072550779316393139037201187579972933016227874898505255743233"
+	"300533498951938156636406532613846576145617323141684480726409"
+	"074184197224754542490884392813625365330881348799432844624838"
+	"960826144439157361917744290729073116318858191758821942010704"
+	"726536748514141391981088590968911224406479710632429529154589"
+	"293799132147906174349149006094094612827453365768213012516958"
+	"693057189940355112250629776318079573232513434098933115589372"
+	"428935891821270739299776803229999720720845111297142577993950"
+	"783716526325576426897121181953632299322177412313472666557946"
+	"026587137818658956285876183561334458426909806227578696972983"
+	"054578648540140777431341495495816167709600470194141141159275"
+	"548586447187051517332624446463129570157208744018317833998766"
+	"292676324122069807882266170905460107352347754465354279502046"
+	"825607840930640910087488682878186052982487934398794575125208"
+	"131434599031355068379234881462786244132403015573059216658125"
+	"100992278732459043154873457532866362865038072260302438341256"
+	"465144627211756104220773841311413109973101672893502315223943"
+	"131161953384837658368750910845308673019625511169535246418667"
+	"822192756475773031982522304934161885363133347824122722726808"
+	"458339668843622993626685401142719276703936351749165952313385"
+	"247253410412444111234661569689109707012146365225868127037807"
+	"653838169759426465847963786308715929383888075292817554540826"
+	"281340379356869541699838857230452874882475626566568389051842"
+	"269616942233880613753230478468266244820792868174047618834373"
+	"911783352591638681513579303490680611741310500871919788283761"
+	"473826205032029153949410495205647160664548204617663407545902"
+	"155255595959035495626212780995301367951250745142427183922194"
+	"679405686105598055836303373290577235698605118096647411642319"
+	"219474157243864921520422978127962037044537385134878691852739"
+	"978563080824265712270538180666161627113218201779779366124407"
+	"844574754753562338454876981852965553927903650323407245581099"
+	"158807518181769597517311013648265985455750620305808055101887"
+	"320313826045110985510052672007356612620966612560448241370561"
+	"199679677792733282710356886335229149926131229035514374201804"
+	"225447070710784729359320523404977483919175478103049697809100"
+	"609955967524096673011016762490361065647326710555615563378359"
+	"408954626110765311053180827944575772439918612038754867514863"
+	"217604919070168030521022438807226197480679192263641289752695"
+	"279367794662267414957708480356805124293407645094292709270568"
+	"454704291549032311245797185365876072558819037766647710690310"
+	"669384727884764603220129302332950334873072394721879741045233"
+	"391084791389282719581455185833551951893903144609338532918282"
+	"071417365794666174600590186688558973292265260457397284219723"
+	"118736526338195892522797003835806498724823327170646268765114"
+	"335047201804332131453475981952420330849091435859688615005340"
+	"662951243478815535510910054031985781353569592327342625691155"
+	"297753939420991863066846663288192966197121277244462515137195"
+	"342887549113968391968700872401047521725534791569882096021521"
+	"725739030856023532346309694644208054801875416636970616158970"
+	"521587368716636562878779650147005687012772946471436217221680"
+	"244104527691159700944328113538972913022260318566564643466194"
+	"762762807772321937689272738612051928757740541051011493615150"
+	"275299712275026278191137262599722341528351699547926563148579"
+	"945678256173476664846284964106409718181820427949855282782538"
+	"418620206551699936257338813616307747712660216941043590501407"
+	"704980849740902536932579576527206665027800420035787899091137"
+	"498285797710848848252835440631389386421149710576503050460098"
+	"225348880547453179874214337446508024003058237008669916793765"
+	"103830790970613932711932541885454647828573565454163547779034"
+	"696478261735426505076787833523027219489668014198674507463022"
+	"589310657355955884354584118602516953160415158848138916494891"
+	"482359394428713333626368035819136954032193064982447142548513"
+	"777798482352540211515117109331361325135068534382485905222012"
+	"689155196601835592087277572480712876900324312948680873379635"
+	"049766825511648515719101185883064389832362822347209928024358"
+	"316443434834701491039800443982197050828044087275939582794327"
+	"098500876914356235193809147621508354816413733354188380887001"
+	"911623409901345292980795015165229743643600614968493977578123"
+	"466095415615447864269417603852427781048383314979868134570808"
+	"915217919397946316940234061179348627230180807326753461268559"
+	"385959678786688421103134141790339174982532045466350837038525"
+	"183177847731101708972936115216192881538981857998354449098289"
+	"173408113131230974433096066603129145174088550345854388495636"
+	"765494379926460031453181542793269110787478232865475929357580"
+	"348192936196178107395850207543849907063319379969931169428718"
+	"329942347533981765560805872472322186708756306455763611238082"
+	"951450138207325773702247286660824416431038520521352370291078"
+	"718247251712503010649103184487159314175972977390771951004404"
+	"935285742659293676372796949610394059160197507860285966047861"
+	"411940542821283013449073170622058378826534472881876688512697"
+	"758815111198429044432164893190718808033606471387328883409622"
+	"920327667611981052185172613337770061634130425782297578896747"
+	"215274225504191258419704542303129850621901180024012018244583"
+	"859069664741628533451563101979900751568200425006085702090401"
+	"221537517047980048268055449980601076610965506150742174772246"
+	"118061736140257508229467892560527108358789784539076822640564"
+	"850851810352577863861819577512851607395927299014823941534626"
+	"348696657393457745078724366706324437838188311582720760585617"
+	"487635004508688532062666933131188059377591626964364639542322"
+	"054994079047698970924302742015839080613569097514938471468421"
+	"996493818271996291393146497945863918551953149000943761983830"
+	"636236545375480765488470416349046929644442714477859372568735"
+	"843708739015199069466751627920202433249482821065761826195203"
+	"859723026379941258427585166740391065737087970718105336581850"
+	"268003743156009120998264173899565279323585156937231413010764"
+	"716608523561569725709426913310091413578317885628039213932500"
+	"135284171861048461662744818955691362183779165069982032305970"
+	"876642081013358484182671863168168338174351197426412625098421"
+	"481239711997827391790388986589171883679226337788805245818923"
+	"874607498645601668109872286941958827402018143065273281785872"
+	"847384936953936746391717131732488209980499904305446724778559"
+	"203846472344227623989606643158012375642854007494547242775256"
+	"898117140062170585337487588594307260069257691479046720590527"
+	"237259474018798808190031749318500514291360716338072006978678"
+	"678209533184089369407377832511947183352849291708100854730341"
+	"450938156361786419525775154653957546143580362599388832564788"
+	"354103919236836698740026304968121883147777634511851850370958"
+	"884085902337976245656103068392811534994239396318567712305532"
+	"477169378421492493173704379367954605145484562415027095545060"
+	"831874739575572895083275461127704135960230120513850917554331"
+	"352277278650414100755269190224957237517573174092361876919730"
+	"465289835269438666544826003345857532325281423386809827947616"
+	"676425828491143428807224317894169834736598542769698312957949"
+	"605903203284128114992351808708487688511436903322773652124574"
+	"055471177142349271989998235771191022554548042468832219533624"
+	"049225313628185783780849179599378819912520555522211658107113"
+	"447678746843053930790961744210668515951907105384498734366645"
+	"249428031772015356705436411724477514133655840609854880392450"
+	"949605226182519804314027265530362531560532656953025288585499"
+	"182228921920121831359074541201044664224711170390199159133806"
+	"269332015718061873656943996928324527943031265119266878834003"
+	"362682519426029626295988425859770358488877080196120965282298"
+	"232237612230358616986168510604382051044429343285625121039569"
+	"326126486782398017268335279614177221030172599765237380415252"
+	"503716285229140380445599733136737846363243777324290551807506"
+	"541472429585746028822540006160866496164919640007935962267377"
+	"060789839526907505659662711614828949104249176417092401488510"
+	"615823548277477841813412329397443687705199567361868375111535"
+	"380877143498420444773617475831606309624504731127984157999557"
+	"818660940286424404275144312853627845343063342311866285268837"
+	"422960089441895882484245945054082617645214582938928610352277"
+	"410119555602965075325424443356593793852682899089314976629899"
+	"773835991388717888860719076570986705247088078593793511009142"
+	"474344996635349786568175384138024607561209403361748867467629"
+	"682257007702707626687955791367383934101209955804380644234879"
+	"805395123927491333463152240956446177043487579040223002287264"
+	"756843617701865806869707173187939918037456096349272671452872"
+	"922420893858994027251574788837911846161770227169407508741963"
+	"414729807676477574570702693444290823666440055726552795145348"
+	"219168459767427369197825367869095117877723957392541043867909"
+	"937470060997392012820142238132910823657536940367596076523833"
+	"377812701709657429614832107556695928504222183715979980013356"
+	"323996396963861087268039321030018015202061305161341454716371"
+	"377251261775727795597989586636757177645626856419109247702765"
+	"013583220037644023978372654055269485171726959848928885152966"
+	"097502777563956522973459672620583266843497935454194334506297"
+	"789118714656105011811810822332373521084368112861541360109122"
+	"200791235053695977711430654151451133236893607856092978814379"
+	"881439122150752237064864676736420913214731240701495311353237"
+	"983819572849112853697828591806699104099315306435617990388595"
+	"202795271374965360450205351235544991668088723423877385558163"
+	"617247959486687176509451394010328416791411019672026111081271"
+	"677642426015450739505038057545285042073081841299473107930734"
+	"353837688028012401932104019803872355878454440858434446609098"
+	"280206732652900093156204893287546907987495659518059539534709"
+	"328514027916546796559631836574970153581238433324096828364072"
+	"134400344200269161377205676209909802573933271591397018622517"
+	"645956348413413974664794017053790027535048049046885143930077"
+	"194991519470308057661102259067039984493186760977741752890345"
+	"473192220637893214146475540262942007429381634927003835133941"
+	"914676847385135317162915391223879714190592014303606413170523"
+	"042176230523286150385679951115593656516900591671184538913558"
+	"092816251191243853120415613844777512078954866614360029341206"
+	"576716710688850917256800353066853946058824831651339265256785"
+	"622460269729620332892007335442599404495662483134697945884683"
+	"759795006415186716458374920343394259217852886898131157533184"
+	"894159749247043678238750268753264909309649831534740397743600"
+	"139998210203084676369899478505461752324146318698089839450421"
+	"143076361782530689506566153604543149790375911800793483912288"
+	"188586309176946988353987684054352129570631591985578449323560"
+	"386626892598170269027020282959579435080091825791399174445592"
+	"26833433740466716699302196502685546875e-4951",
+	false,
+	-0x8p-152,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0,
+	false,
+	-0x4p-1076,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0,
+	false,
+	-0x1p-16444,
+	-0x1p-16444,
+	-0x8p-16448,
+	-0x8p-16448,
+	true,
+	-0xcp-16448,
+	-0xcp-16448,
+	-0xcp-16448,
+	-0xcp-16448,
+	false,
+	-0x4p-1076,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0,
+	true,
+	-0xcp-16448,
+	-0xcp-16448,
+	-0xcp-16448,
+	-0xcp-16448),
+  TEST ("-5.467799297823711903792608900429129724598576223540345015581"
+	"470730542557532950096605214341062938740807795871021020805296"
+	"652950478448933048254960262113384713508225733871766897517853"
+	"837895708450339634932343848975116093410479690330290902886861"
+	"199931259216523277807574569082153073133673942958789577402321"
+	"393933101298533191266102118889630609532339508457854220031996"
+	"317935940718000325144008438048416150458546268408294693278282"
+	"948818382981756745231443707694395053270779125240469926867881"
+	"019850287125023579685557790983055974962881759919483752202903"
+	"689199564880305684635452065363595791988290536352100701716974"
+	"146329604439226626943340805268641901769971862776194876385604"
+	"059269084172123930049144599166605103175580232672032966645406"
+	"656863031434873551175363941825798425331906382524706572766485"
+	"232874542230564262609161782396887243896247009244068837251567"
+	"783223271286692480010679711347802408351619999199127493689411"
+	"300623337751847138939498426200450305845548565910009066524152"
+	"545480362818290224140170178363735317929685005697363930594593"
+	"881342895328789259362029119598601112899006188879876371854878"
+	"902571753767478028100558334716504784604592507791482451533133"
+	"513128606357440718182123637790769320922442349066328991687862"
+	"072550779316393139037201187579972933016227874898505255743233"
+	"300533498951938156636406532613846576145617323141684480726409"
+	"074184197224754542490884392813625365330881348799432844624838"
+	"960826144439157361917744290729073116318858191758821942010704"
+	"726536748514141391981088590968911224406479710632429529154589"
+	"293799132147906174349149006094094612827453365768213012516958"
+	"693057189940355112250629776318079573232513434098933115589372"
+	"428935891821270739299776803229999720720845111297142577993950"
+	"783716526325576426897121181953632299322177412313472666557946"
+	"026587137818658956285876183561334458426909806227578696972983"
+	"054578648540140777431341495495816167709600470194141141159275"
+	"548586447187051517332624446463129570157208744018317833998766"
+	"292676324122069807882266170905460107352347754465354279502046"
+	"825607840930640910087488682878186052982487934398794575125208"
+	"131434599031355068379234881462786244132403015573059216658125"
+	"100992278732459043154873457532866362865038072260302438341256"
+	"465144627211756104220773841311413109973101672893502315223943"
+	"131161953384837658368750910845308673019625511169535246418667"
+	"822192756475773031982522304934161885363133347824122722726808"
+	"458339668843622993626685401142719276703936351749165952313385"
+	"247253410412444111234661569689109707012146365225868127037807"
+	"653838169759426465847963786308715929383888075292817554540826"
+	"281340379356869541699838857230452874882475626566568389051842"
+	"269616942233880613753230478468266244820792868174047618834373"
+	"911783352591638681513579303490680611741310500871919788283761"
+	"473826205032029153949410495205647160664548204617663407545902"
+	"155255595959035495626212780995301367951250745142427183922194"
+	"679405686105598055836303373290577235698605118096647411642319"
+	"219474157243864921520422978127962037044537385134878691852739"
+	"978563080824265712270538180666161627113218201779779366124407"
+	"844574754753562338454876981852965553927903650323407245581099"
+	"158807518181769597517311013648265985455750620305808055101887"
+	"320313826045110985510052672007356612620966612560448241370561"
+	"199679677792733282710356886335229149926131229035514374201804"
+	"225447070710784729359320523404977483919175478103049697809100"
+	"609955967524096673011016762490361065647326710555615563378359"
+	"408954626110765311053180827944575772439918612038754867514863"
+	"217604919070168030521022438807226197480679192263641289752695"
+	"279367794662267414957708480356805124293407645094292709270568"
+	"454704291549032311245797185365876072558819037766647710690310"
+	"669384727884764603220129302332950334873072394721879741045233"
+	"391084791389282719581455185833551951893903144609338532918282"
+	"071417365794666174600590186688558973292265260457397284219723"
+	"118736526338195892522797003835806498724823327170646268765114"
+	"335047201804332131453475981952420330849091435859688615005340"
+	"662951243478815535510910054031985781353569592327342625691155"
+	"297753939420991863066846663288192966197121277244462515137195"
+	"342887549113968391968700872401047521725534791569882096021521"
+	"725739030856023532346309694644208054801875416636970616158970"
+	"521587368716636562878779650147005687012772946471436217221680"
+	"244104527691159700944328113538972913022260318566564643466194"
+	"762762807772321937689272738612051928757740541051011493615150"
+	"275299712275026278191137262599722341528351699547926563148579"
+	"945678256173476664846284964106409718181820427949855282782538"
+	"418620206551699936257338813616307747712660216941043590501407"
+	"704980849740902536932579576527206665027800420035787899091137"
+	"498285797710848848252835440631389386421149710576503050460098"
+	"225348880547453179874214337446508024003058237008669916793765"
+	"103830790970613932711932541885454647828573565454163547779034"
+	"696478261735426505076787833523027219489668014198674507463022"
+	"589310657355955884354584118602516953160415158848138916494891"
+	"482359394428713333626368035819136954032193064982447142548513"
+	"777798482352540211515117109331361325135068534382485905222012"
+	"689155196601835592087277572480712876900324312948680873379635"
+	"049766825511648515719101185883064389832362822347209928024358"
+	"316443434834701491039800443982197050828044087275939582794327"
+	"098500876914356235193809147621508354816413733354188380887001"
+	"911623409901345292980795015165229743643600614968493977578123"
+	"466095415615447864269417603852427781048383314979868134570808"
+	"915217919397946316940234061179348627230180807326753461268559"
+	"385959678786688421103134141790339174982532045466350837038525"
+	"183177847731101708972936115216192881538981857998354449098289"
+	"173408113131230974433096066603129145174088550345854388495636"
+	"765494379926460031453181542793269110787478232865475929357580"
+	"348192936196178107395850207543849907063319379969931169428718"
+	"329942347533981765560805872472322186708756306455763611238082"
+	"951450138207325773702247286660824416431038520521352370291078"
+	"718247251712503010649103184487159314175972977390771951004404"
+	"935285742659293676372796949610394059160197507860285966047861"
+	"411940542821283013449073170622058378826534472881876688512697"
+	"758815111198429044432164893190718808033606471387328883409622"
+	"920327667611981052185172613337770061634130425782297578896747"
+	"215274225504191258419704542303129850621901180024012018244583"
+	"859069664741628533451563101979900751568200425006085702090401"
+	"221537517047980048268055449980601076610965506150742174772246"
+	"118061736140257508229467892560527108358789784539076822640564"
+	"850851810352577863861819577512851607395927299014823941534626"
+	"348696657393457745078724366706324437838188311582720760585617"
+	"487635004508688532062666933131188059377591626964364639542322"
+	"054994079047698970924302742015839080613569097514938471468421"
+	"996493818271996291393146497945863918551953149000943761983830"
+	"636236545375480765488470416349046929644442714477859372568735"
+	"843708739015199069466751627920202433249482821065761826195203"
+	"859723026379941258427585166740391065737087970718105336581850"
+	"268003743156009120998264173899565279323585156937231413010764"
+	"716608523561569725709426913310091413578317885628039213932500"
+	"135284171861048461662744818955691362183779165069982032305970"
+	"876642081013358484182671863168168338174351197426412625098421"
+	"481239711997827391790388986589171883679226337788805245818923"
+	"874607498645601668109872286941958827402018143065273281785872"
+	"847384936953936746391717131732488209980499904305446724778559"
+	"203846472344227623989606643158012375642854007494547242775256"
+	"898117140062170585337487588594307260069257691479046720590527"
+	"237259474018798808190031749318500514291360716338072006978678"
+	"678209533184089369407377832511947183352849291708100854730341"
+	"450938156361786419525775154653957546143580362599388832564788"
+	"354103919236836698740026304968121883147777634511851850370958"
+	"884085902337976245656103068392811534994239396318567712305532"
+	"477169378421492493173704379367954605145484562415027095545060"
+	"831874739575572895083275461127704135960230120513850917554331"
+	"352277278650414100755269190224957237517573174092361876919730"
+	"465289835269438666544826003345857532325281423386809827947616"
+	"676425828491143428807224317894169834736598542769698312957949"
+	"605903203284128114992351808708487688511436903322773652124574"
+	"055471177142349271989998235771191022554548042468832219533624"
+	"049225313628185783780849179599378819912520555522211658107113"
+	"447678746843053930790961744210668515951907105384498734366645"
+	"249428031772015356705436411724477514133655840609854880392450"
+	"949605226182519804314027265530362531560532656953025288585499"
+	"182228921920121831359074541201044664224711170390199159133806"
+	"269332015718061873656943996928324527943031265119266878834003"
+	"362682519426029626295988425859770358488877080196120965282298"
+	"232237612230358616986168510604382051044429343285625121039569"
+	"326126486782398017268335279614177221030172599765237380415252"
+	"503716285229140380445599733136737846363243777324290551807506"
+	"541472429585746028822540006160866496164919640007935962267377"
+	"060789839526907505659662711614828949104249176417092401488510"
+	"615823548277477841813412329397443687705199567361868375111535"
+	"380877143498420444773617475831606309624504731127984157999557"
+	"818660940286424404275144312853627845343063342311866285268837"
+	"422960089441895882484245945054082617645214582938928610352277"
+	"410119555602965075325424443356593793852682899089314976629899"
+	"773835991388717888860719076570986705247088078593793511009142"
+	"474344996635349786568175384138024607561209403361748867467629"
+	"682257007702707626687955791367383934101209955804380644234879"
+	"805395123927491333463152240956446177043487579040223002287264"
+	"756843617701865806869707173187939918037456096349272671452872"
+	"922420893858994027251574788837911846161770227169407508741963"
+	"414729807676477574570702693444290823666440055726552795145348"
+	"219168459767427369197825367869095117877723957392541043867909"
+	"937470060997392012820142238132910823657536940367596076523833"
+	"377812701709657429614832107556695928504222183715979980013356"
+	"323996396963861087268039321030018015202061305161341454716371"
+	"377251261775727795597989586636757177645626856419109247702765"
+	"013583220037644023978372654055269485171726959848928885152966"
+	"097502777563956522973459672620583266843497935454194334506297"
+	"789118714656105011811810822332373521084368112861541360109122"
+	"200791235053695977711430654151451133236893607856092978814379"
+	"881439122150752237064864676736420913214731240701495311353237"
+	"983819572849112853697828591806699104099315306435617990388595"
+	"202795271374965360450205351235544991668088723423877385558163"
+	"617247959486687176509451394010328416791411019672026111081271"
+	"677642426015450739505038057545285042073081841299473107930734"
+	"353837688028012401932104019803872355878454440858434446609098"
+	"280206732652900093156204893287546907987495659518059539534709"
+	"328514027916546796559631836574970153581238433324096828364072"
+	"134400344200269161377205676209909802573933271591397018622517"
+	"645956348413413974664794017053790027535048049046885143930077"
+	"194991519470308057661102259067039984493186760977741752890345"
+	"473192220637893214146475540262942007429381634927003835133941"
+	"914676847385135317162915391223879714190592014303606413170523"
+	"042176230523286150385679951115593656516900591671184538913558"
+	"092816251191243853120415613844777512078954866614360029341206"
+	"576716710688850917256800353066853946058824831651339265256785"
+	"622460269729620332892007335442599404495662483134697945884683"
+	"759795006415186716458374920343394259217852886898131157533184"
+	"894159749247043678238750268753264909309649831534740397743600"
+	"139998210203084676369899478505461752324146318698089839450421"
+	"143076361782530689506566153604543149790375911800793483912288"
+	"188586309176946988353987684054352129570631591985578449323560"
+	"386626892598170269027020282959579435080091825791399174445592"
+	"2683343374046671669930219650268554687501e-4951",
+	false,
+	-0x8p-152,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0,
+	false,
+	-0x4p-1076,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0,
+	false,
+	-0x1p-16444,
+	-0x1p-16444,
+	-0x8p-16448,
+	-0x8p-16448,
+	false,
+	-0x1p-16444,
+	-0xcp-16448,
+	-0xcp-16448,
+	-0xcp-16448,
+	false,
+	-0x4p-1076,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0,
+	false,
+	-0xc.000000000004p-16448,
+	-0xcp-16448,
+	-0xcp-16448,
+	-0xcp-16448),
+  TEST ("5.4677992978237119037926089004291297245985762235403450155814"
+	"707305425575329500966052143410629387408077958710210208052966"
+	"529504784489330482549602621133847135082257338717668975178538"
+	"378957084503396349323438489751160934104796903302909028868611"
+	"999312592165232778075745690821530731336739429587895774023213"
+	"939331012985331912661021188896306095323395084578542200319963"
+	"179359407180003251440084380484161504585462684082946932782829"
+	"488183829817567452314437076943950532707791252404699268678810"
+	"198502871250235796855577909830559749628817599194837522029036"
+	"891995648803056846354520653635957919882905363521007017169741"
+	"463296044392266269433408052686419017699718627761948763856040"
+	"592690841721239300491445991666051031755802326720329666454066"
+	"568630314348735511753639418257984253319063825247065727664852"
+	"328745422305642626091617823968872438962470092440688372515677"
+	"832232712866924800106797113478024083516199991991274936894113"
+	"006233377518471389394984262004503058455485659100090665241525"
+	"454803628182902241401701783637353179296850056973639305945938"
+	"813428953287892593620291195986011128990061888798763718548789"
+	"025717537674780281005583347165047846045925077914824515331335"
+	"131286063574407181821236377907693209224423490663289916878620"
+	"725507793163931390372011875799729330162278748985052557432333"
+	"005334989519381566364065326138465761456173231416844807264090"
+	"741841972247545424908843928136253653308813487994328446248389"
+	"608261444391573619177442907290731163188581917588219420107047"
+	"265367485141413919810885909689112244064797106324295291545892"
+	"937991321479061743491490060940946128274533657682130125169586"
+	"930571899403551122506297763180795732325134340989331155893724"
+	"289358918212707392997768032299997207208451112971425779939507"
+	"837165263255764268971211819536322993221774123134726665579460"
+	"265871378186589562858761835613344584269098062275786969729830"
+	"545786485401407774313414954958161677096004701941411411592755"
+	"485864471870515173326244464631295701572087440183178339987662"
+	"926763241220698078822661709054601073523477544653542795020468"
+	"256078409306409100874886828781860529824879343987945751252081"
+	"314345990313550683792348814627862441324030155730592166581251"
+	"009922787324590431548734575328663628650380722603024383412564"
+	"651446272117561042207738413114131099731016728935023152239431"
+	"311619533848376583687509108453086730196255111695352464186678"
+	"221927564757730319825223049341618853631333478241227227268084"
+	"583396688436229936266854011427192767039363517491659523133852"
+	"472534104124441112346615696891097070121463652258681270378076"
+	"538381697594264658479637863087159293838880752928175545408262"
+	"813403793568695416998388572304528748824756265665683890518422"
+	"696169422338806137532304784682662448207928681740476188343739"
+	"117833525916386815135793034906806117413105008719197882837614"
+	"738262050320291539494104952056471606645482046176634075459021"
+	"552555959590354956262127809953013679512507451424271839221946"
+	"794056861055980558363033732905772356986051180966474116423192"
+	"194741572438649215204229781279620370445373851348786918527399"
+	"785630808242657122705381806661616271132182017797793661244078"
+	"445747547535623384548769818529655539279036503234072455810991"
+	"588075181817695975173110136482659854557506203058080551018873"
+	"203138260451109855100526720073566126209666125604482413705611"
+	"996796777927332827103568863352291499261312290355143742018042"
+	"254470707107847293593205234049774839191754781030496978091006"
+	"099559675240966730110167624903610656473267105556155633783594"
+	"089546261107653110531808279445757724399186120387548675148632"
+	"176049190701680305210224388072261974806791922636412897526952"
+	"793677946622674149577084803568051242934076450942927092705684"
+	"547042915490323112457971853658760725588190377666477106903106"
+	"693847278847646032201293023329503348730723947218797410452333"
+	"910847913892827195814551858335519518939031446093385329182820"
+	"714173657946661746005901866885589732922652604573972842197231"
+	"187365263381958925227970038358064987248233271706462687651143"
+	"350472018043321314534759819524203308490914358596886150053406"
+	"629512434788155355109100540319857813535695923273426256911552"
+	"977539394209918630668466632881929661971212772444625151371953"
+	"428875491139683919687008724010475217255347915698820960215217"
+	"257390308560235323463096946442080548018754166369706161589705"
+	"215873687166365628787796501470056870127729464714362172216802"
+	"441045276911597009443281135389729130222603185665646434661947"
+	"627628077723219376892727386120519287577405410510114936151502"
+	"752997122750262781911372625997223415283516995479265631485799"
+	"456782561734766648462849641064097181818204279498552827825384"
+	"186202065516999362573388136163077477126602169410435905014077"
+	"049808497409025369325795765272066650278004200357878990911374"
+	"982857977108488482528354406313893864211497105765030504600982"
+	"253488805474531798742143374465080240030582370086699167937651"
+	"038307909706139327119325418854546478285735654541635477790346"
+	"964782617354265050767878335230272194896680141986745074630225"
+	"893106573559558843545841186025169531604151588481389164948914"
+	"823593944287133336263680358191369540321930649824471425485137"
+	"777984823525402115151171093313613251350685343824859052220126"
+	"891551966018355920872775724807128769003243129486808733796350"
+	"497668255116485157191011858830643898323628223472099280243583"
+	"164434348347014910398004439821970508280440872759395827943270"
+	"985008769143562351938091476215083548164137333541883808870019"
+	"116234099013452929807950151652297436436006149684939775781234"
+	"660954156154478642694176038524277810483833149798681345708089"
+	"152179193979463169402340611793486272301808073267534612685593"
+	"859596787866884211031341417903391749825320454663508370385251"
+	"831778477311017089729361152161928815389818579983544490982891"
+	"734081131312309744330960666031291451740885503458543884956367"
+	"654943799264600314531815427932691107874782328654759293575803"
+	"481929361961781073958502075438499070633193799699311694287183"
+	"299423475339817655608058724723221867087563064557636112380829"
+	"514501382073257737022472866608244164310385205213523702910787"
+	"182472517125030106491031844871593141759729773907719510044049"
+	"352857426592936763727969496103940591601975078602859660478614"
+	"119405428212830134490731706220583788265344728818766885126977"
+	"588151111984290444321648931907188080336064713873288834096229"
+	"203276676119810521851726133377700616341304257822975788967472"
+	"152742255041912584197045423031298506219011800240120182445838"
+	"590696647416285334515631019799007515682004250060857020904012"
+	"215375170479800482680554499806010766109655061507421747722461"
+	"180617361402575082294678925605271083587897845390768226405648"
+	"508518103525778638618195775128516073959272990148239415346263"
+	"486966573934577450787243667063244378381883115827207605856174"
+	"876350045086885320626669331311880593775916269643646395423220"
+	"549940790476989709243027420158390806135690975149384714684219"
+	"964938182719962913931464979458639185519531490009437619838306"
+	"362365453754807654884704163490469296444427144778593725687358"
+	"437087390151990694667516279202024332494828210657618261952038"
+	"597230263799412584275851667403910657370879707181053365818502"
+	"680037431560091209982641738995652793235851569372314130107647"
+	"166085235615697257094269133100914135783178856280392139325001"
+	"352841718610484616627448189556913621837791650699820323059708"
+	"766420810133584841826718631681683381743511974264126250984214"
+	"812397119978273917903889865891718836792263377888052458189238"
+	"746074986456016681098722869419588274020181430652732817858728"
+	"473849369539367463917171317324882099804999043054467247785592"
+	"038464723442276239896066431580123756428540074945472427752568"
+	"981171400621705853374875885943072600692576914790467205905272"
+	"372594740187988081900317493185005142913607163380720069786786"
+	"782095331840893694073778325119471833528492917081008547303414"
+	"509381563617864195257751546539575461435803625993888325647883"
+	"541039192368366987400263049681218831477776345118518503709588"
+	"840859023379762456561030683928115349942393963185677123055324"
+	"771693784214924931737043793679546051454845624150270955450608"
+	"318747395755728950832754611277041359602301205138509175543313"
+	"522772786504141007552691902249572375175731740923618769197304"
+	"652898352694386665448260033458575323252814233868098279476166"
+	"764258284911434288072243178941698347365985427696983129579496"
+	"059032032841281149923518087084876885114369033227736521245740"
+	"554711771423492719899982357711910225545480424688322195336240"
+	"492253136281857837808491795993788199125205555222116581071134"
+	"476787468430539307909617442106685159519071053844987343666452"
+	"494280317720153567054364117244775141336558406098548803924509"
+	"496052261825198043140272655303625315605326569530252885854991"
+	"822289219201218313590745412010446642247111703901991591338062"
+	"693320157180618736569439969283245279430312651192668788340033"
+	"626825194260296262959884258597703584888770801961209652822982"
+	"322376122303586169861685106043820510444293432856251210395693"
+	"261264867823980172683352796141772210301725997652373804152525"
+	"037162852291403804455997331367378463632437773242905518075065"
+	"414724295857460288225400061608664961649196400079359622673770"
+	"607898395269075056596627116148289491042491764170924014885106"
+	"158235482774778418134123293974436877051995673618683751115353"
+	"808771434984204447736174758316063096245047311279841579995578"
+	"186609402864244042751443128536278453430633423118662852688374"
+	"229600894418958824842459450540826176452145829389286103522774"
+	"101195556029650753254244433565937938526828990893149766298997"
+	"738359913887178888607190765709867052470880785937935110091424"
+	"743449966353497865681753841380246075612094033617488674676296"
+	"822570077027076266879557913673839341012099558043806442348798"
+	"053951239274913334631522409564461770434875790402230022872647"
+	"568436177018658068697071731879399180374560963492726714528729"
+	"224208938589940272515747888379118461617702271694075087419634"
+	"147298076764775745707026934442908236664400557265527951453482"
+	"191684597674273691978253678690951178777239573925410438679099"
+	"374700609973920128201422381329108236575369403675960765238333"
+	"778127017096574296148321075566959285042221837159799800133563"
+	"239963969638610872680393210300180152020613051613414547163713"
+	"772512617757277955979895866367571776456268564191092477027650"
+	"135832200376440239783726540552694851717269598489288851529660"
+	"975027775639565229734596726205832668434979354541943345062977"
+	"891187146561050118118108223323735210843681128615413601091222"
+	"007912350536959777114306541514511332368936078560929788143798"
+	"814391221507522370648646767364209132147312407014953113532379"
+	"838195728491128536978285918066991040993153064356179903885952"
+	"027952713749653604502053512355449916680887234238773855581636"
+	"172479594866871765094513940103284167914110196720261110812716"
+	"776424260154507395050380575452850420730818412994731079307343"
+	"538376880280124019321040198038723558784544408584344466090982"
+	"802067326529000931562048932875469079874956595180595395347093"
+	"285140279165467965596318365749701535812384333240968283640721"
+	"344003442002691613772056762099098025739332715913970186225176"
+	"459563484134139746647940170537900275350480490468851439300771"
+	"949915194703080576611022590670399844931867609777417528903454"
+	"731922206378932141464755402629420074293816349270038351339419"
+	"146768473851353171629153912238797141905920143036064131705230"
+	"421762305232861503856799511155936565169005916711845389135580"
+	"928162511912438531204156138447775120789548666143600293412065"
+	"767167106888509172568003530668539460588248316513392652567856"
+	"224602697296203328920073354425994044956624831346979458846837"
+	"597950064151867164583749203433942592178528868981311575331848"
+	"941597492470436782387502687532649093096498315347403977436001"
+	"399982102030846763698994785054617523241463186980898394504211"
+	"430763617825306895065661536045431497903759118007934839122881"
+	"885863091769469883539876840543521295706315919855784493235603"
+	"866268925981702690270202829595794350800918257913991744455922"
+	"683343374046671669930219650268554687499e-4951",
+	false,
+	0x0p+0,
+	0x0p+0,
+	0x0p+0,
+	0x8p-152,
+	false,
+	0x0p+0,
+	0x0p+0,
+	0x0p+0,
+	0x4p-1076,
+	false,
+	0x8p-16448,
+	0x8p-16448,
+	0x8p-16448,
+	0x1p-16444,
+	false,
+	0x8p-16448,
+	0xcp-16448,
+	0x8p-16448,
+	0xcp-16448,
+	false,
+	0x0p+0,
+	0x0p+0,
+	0x0p+0,
+	0x4p-1076,
+	false,
+	0xb.fffffffffffcp-16448,
+	0xcp-16448,
+	0xb.fffffffffffcp-16448,
+	0xcp-16448),
+  TEST ("5.4677992978237119037926089004291297245985762235403450155814"
+	"707305425575329500966052143410629387408077958710210208052966"
+	"529504784489330482549602621133847135082257338717668975178538"
+	"378957084503396349323438489751160934104796903302909028868611"
+	"999312592165232778075745690821530731336739429587895774023213"
+	"939331012985331912661021188896306095323395084578542200319963"
+	"179359407180003251440084380484161504585462684082946932782829"
+	"488183829817567452314437076943950532707791252404699268678810"
+	"198502871250235796855577909830559749628817599194837522029036"
+	"891995648803056846354520653635957919882905363521007017169741"
+	"463296044392266269433408052686419017699718627761948763856040"
+	"592690841721239300491445991666051031755802326720329666454066"
+	"568630314348735511753639418257984253319063825247065727664852"
+	"328745422305642626091617823968872438962470092440688372515677"
+	"832232712866924800106797113478024083516199991991274936894113"
+	"006233377518471389394984262004503058455485659100090665241525"
+	"454803628182902241401701783637353179296850056973639305945938"
+	"813428953287892593620291195986011128990061888798763718548789"
+	"025717537674780281005583347165047846045925077914824515331335"
+	"131286063574407181821236377907693209224423490663289916878620"
+	"725507793163931390372011875799729330162278748985052557432333"
+	"005334989519381566364065326138465761456173231416844807264090"
+	"741841972247545424908843928136253653308813487994328446248389"
+	"608261444391573619177442907290731163188581917588219420107047"
+	"265367485141413919810885909689112244064797106324295291545892"
+	"937991321479061743491490060940946128274533657682130125169586"
+	"930571899403551122506297763180795732325134340989331155893724"
+	"289358918212707392997768032299997207208451112971425779939507"
+	"837165263255764268971211819536322993221774123134726665579460"
+	"265871378186589562858761835613344584269098062275786969729830"
+	"545786485401407774313414954958161677096004701941411411592755"
+	"485864471870515173326244464631295701572087440183178339987662"
+	"926763241220698078822661709054601073523477544653542795020468"
+	"256078409306409100874886828781860529824879343987945751252081"
+	"314345990313550683792348814627862441324030155730592166581251"
+	"009922787324590431548734575328663628650380722603024383412564"
+	"651446272117561042207738413114131099731016728935023152239431"
+	"311619533848376583687509108453086730196255111695352464186678"
+	"221927564757730319825223049341618853631333478241227227268084"
+	"583396688436229936266854011427192767039363517491659523133852"
+	"472534104124441112346615696891097070121463652258681270378076"
+	"538381697594264658479637863087159293838880752928175545408262"
+	"813403793568695416998388572304528748824756265665683890518422"
+	"696169422338806137532304784682662448207928681740476188343739"
+	"117833525916386815135793034906806117413105008719197882837614"
+	"738262050320291539494104952056471606645482046176634075459021"
+	"552555959590354956262127809953013679512507451424271839221946"
+	"794056861055980558363033732905772356986051180966474116423192"
+	"194741572438649215204229781279620370445373851348786918527399"
+	"785630808242657122705381806661616271132182017797793661244078"
+	"445747547535623384548769818529655539279036503234072455810991"
+	"588075181817695975173110136482659854557506203058080551018873"
+	"203138260451109855100526720073566126209666125604482413705611"
+	"996796777927332827103568863352291499261312290355143742018042"
+	"254470707107847293593205234049774839191754781030496978091006"
+	"099559675240966730110167624903610656473267105556155633783594"
+	"089546261107653110531808279445757724399186120387548675148632"
+	"176049190701680305210224388072261974806791922636412897526952"
+	"793677946622674149577084803568051242934076450942927092705684"
+	"547042915490323112457971853658760725588190377666477106903106"
+	"693847278847646032201293023329503348730723947218797410452333"
+	"910847913892827195814551858335519518939031446093385329182820"
+	"714173657946661746005901866885589732922652604573972842197231"
+	"187365263381958925227970038358064987248233271706462687651143"
+	"350472018043321314534759819524203308490914358596886150053406"
+	"629512434788155355109100540319857813535695923273426256911552"
+	"977539394209918630668466632881929661971212772444625151371953"
+	"428875491139683919687008724010475217255347915698820960215217"
+	"257390308560235323463096946442080548018754166369706161589705"
+	"215873687166365628787796501470056870127729464714362172216802"
+	"441045276911597009443281135389729130222603185665646434661947"
+	"627628077723219376892727386120519287577405410510114936151502"
+	"752997122750262781911372625997223415283516995479265631485799"
+	"456782561734766648462849641064097181818204279498552827825384"
+	"186202065516999362573388136163077477126602169410435905014077"
+	"049808497409025369325795765272066650278004200357878990911374"
+	"982857977108488482528354406313893864211497105765030504600982"
+	"253488805474531798742143374465080240030582370086699167937651"
+	"038307909706139327119325418854546478285735654541635477790346"
+	"964782617354265050767878335230272194896680141986745074630225"
+	"893106573559558843545841186025169531604151588481389164948914"
+	"823593944287133336263680358191369540321930649824471425485137"
+	"777984823525402115151171093313613251350685343824859052220126"
+	"891551966018355920872775724807128769003243129486808733796350"
+	"497668255116485157191011858830643898323628223472099280243583"
+	"164434348347014910398004439821970508280440872759395827943270"
+	"985008769143562351938091476215083548164137333541883808870019"
+	"116234099013452929807950151652297436436006149684939775781234"
+	"660954156154478642694176038524277810483833149798681345708089"
+	"152179193979463169402340611793486272301808073267534612685593"
+	"859596787866884211031341417903391749825320454663508370385251"
+	"831778477311017089729361152161928815389818579983544490982891"
+	"734081131312309744330960666031291451740885503458543884956367"
+	"654943799264600314531815427932691107874782328654759293575803"
+	"481929361961781073958502075438499070633193799699311694287183"
+	"299423475339817655608058724723221867087563064557636112380829"
+	"514501382073257737022472866608244164310385205213523702910787"
+	"182472517125030106491031844871593141759729773907719510044049"
+	"352857426592936763727969496103940591601975078602859660478614"
+	"119405428212830134490731706220583788265344728818766885126977"
+	"588151111984290444321648931907188080336064713873288834096229"
+	"203276676119810521851726133377700616341304257822975788967472"
+	"152742255041912584197045423031298506219011800240120182445838"
+	"590696647416285334515631019799007515682004250060857020904012"
+	"215375170479800482680554499806010766109655061507421747722461"
+	"180617361402575082294678925605271083587897845390768226405648"
+	"508518103525778638618195775128516073959272990148239415346263"
+	"486966573934577450787243667063244378381883115827207605856174"
+	"876350045086885320626669331311880593775916269643646395423220"
+	"549940790476989709243027420158390806135690975149384714684219"
+	"964938182719962913931464979458639185519531490009437619838306"
+	"362365453754807654884704163490469296444427144778593725687358"
+	"437087390151990694667516279202024332494828210657618261952038"
+	"597230263799412584275851667403910657370879707181053365818502"
+	"680037431560091209982641738995652793235851569372314130107647"
+	"166085235615697257094269133100914135783178856280392139325001"
+	"352841718610484616627448189556913621837791650699820323059708"
+	"766420810133584841826718631681683381743511974264126250984214"
+	"812397119978273917903889865891718836792263377888052458189238"
+	"746074986456016681098722869419588274020181430652732817858728"
+	"473849369539367463917171317324882099804999043054467247785592"
+	"038464723442276239896066431580123756428540074945472427752568"
+	"981171400621705853374875885943072600692576914790467205905272"
+	"372594740187988081900317493185005142913607163380720069786786"
+	"782095331840893694073778325119471833528492917081008547303414"
+	"509381563617864195257751546539575461435803625993888325647883"
+	"541039192368366987400263049681218831477776345118518503709588"
+	"840859023379762456561030683928115349942393963185677123055324"
+	"771693784214924931737043793679546051454845624150270955450608"
+	"318747395755728950832754611277041359602301205138509175543313"
+	"522772786504141007552691902249572375175731740923618769197304"
+	"652898352694386665448260033458575323252814233868098279476166"
+	"764258284911434288072243178941698347365985427696983129579496"
+	"059032032841281149923518087084876885114369033227736521245740"
+	"554711771423492719899982357711910225545480424688322195336240"
+	"492253136281857837808491795993788199125205555222116581071134"
+	"476787468430539307909617442106685159519071053844987343666452"
+	"494280317720153567054364117244775141336558406098548803924509"
+	"496052261825198043140272655303625315605326569530252885854991"
+	"822289219201218313590745412010446642247111703901991591338062"
+	"693320157180618736569439969283245279430312651192668788340033"
+	"626825194260296262959884258597703584888770801961209652822982"
+	"322376122303586169861685106043820510444293432856251210395693"
+	"261264867823980172683352796141772210301725997652373804152525"
+	"037162852291403804455997331367378463632437773242905518075065"
+	"414724295857460288225400061608664961649196400079359622673770"
+	"607898395269075056596627116148289491042491764170924014885106"
+	"158235482774778418134123293974436877051995673618683751115353"
+	"808771434984204447736174758316063096245047311279841579995578"
+	"186609402864244042751443128536278453430633423118662852688374"
+	"229600894418958824842459450540826176452145829389286103522774"
+	"101195556029650753254244433565937938526828990893149766298997"
+	"738359913887178888607190765709867052470880785937935110091424"
+	"743449966353497865681753841380246075612094033617488674676296"
+	"822570077027076266879557913673839341012099558043806442348798"
+	"053951239274913334631522409564461770434875790402230022872647"
+	"568436177018658068697071731879399180374560963492726714528729"
+	"224208938589940272515747888379118461617702271694075087419634"
+	"147298076764775745707026934442908236664400557265527951453482"
+	"191684597674273691978253678690951178777239573925410438679099"
+	"374700609973920128201422381329108236575369403675960765238333"
+	"778127017096574296148321075566959285042221837159799800133563"
+	"239963969638610872680393210300180152020613051613414547163713"
+	"772512617757277955979895866367571776456268564191092477027650"
+	"135832200376440239783726540552694851717269598489288851529660"
+	"975027775639565229734596726205832668434979354541943345062977"
+	"891187146561050118118108223323735210843681128615413601091222"
+	"007912350536959777114306541514511332368936078560929788143798"
+	"814391221507522370648646767364209132147312407014953113532379"
+	"838195728491128536978285918066991040993153064356179903885952"
+	"027952713749653604502053512355449916680887234238773855581636"
+	"172479594866871765094513940103284167914110196720261110812716"
+	"776424260154507395050380575452850420730818412994731079307343"
+	"538376880280124019321040198038723558784544408584344466090982"
+	"802067326529000931562048932875469079874956595180595395347093"
+	"285140279165467965596318365749701535812384333240968283640721"
+	"344003442002691613772056762099098025739332715913970186225176"
+	"459563484134139746647940170537900275350480490468851439300771"
+	"949915194703080576611022590670399844931867609777417528903454"
+	"731922206378932141464755402629420074293816349270038351339419"
+	"146768473851353171629153912238797141905920143036064131705230"
+	"421762305232861503856799511155936565169005916711845389135580"
+	"928162511912438531204156138447775120789548666143600293412065"
+	"767167106888509172568003530668539460588248316513392652567856"
+	"224602697296203328920073354425994044956624831346979458846837"
+	"597950064151867164583749203433942592178528868981311575331848"
+	"941597492470436782387502687532649093096498315347403977436001"
+	"399982102030846763698994785054617523241463186980898394504211"
+	"430763617825306895065661536045431497903759118007934839122881"
+	"885863091769469883539876840543521295706315919855784493235603"
+	"866268925981702690270202829595794350800918257913991744455922"
+	"6833433740466716699302196502685546875e-4951",
+	false,
+	0x0p+0,
+	0x0p+0,
+	0x0p+0,
+	0x8p-152,
+	false,
+	0x0p+0,
+	0x0p+0,
+	0x0p+0,
+	0x4p-1076,
+	false,
+	0x8p-16448,
+	0x1p-16444,
+	0x8p-16448,
+	0x1p-16444,
+	true,
+	0xcp-16448,
+	0xcp-16448,
+	0xcp-16448,
+	0xcp-16448,
+	false,
+	0x0p+0,
+	0x0p+0,
+	0x0p+0,
+	0x4p-1076,
+	true,
+	0xcp-16448,
+	0xcp-16448,
+	0xcp-16448,
+	0xcp-16448),
+  TEST ("5.4677992978237119037926089004291297245985762235403450155814"
+	"707305425575329500966052143410629387408077958710210208052966"
+	"529504784489330482549602621133847135082257338717668975178538"
+	"378957084503396349323438489751160934104796903302909028868611"
+	"999312592165232778075745690821530731336739429587895774023213"
+	"939331012985331912661021188896306095323395084578542200319963"
+	"179359407180003251440084380484161504585462684082946932782829"
+	"488183829817567452314437076943950532707791252404699268678810"
+	"198502871250235796855577909830559749628817599194837522029036"
+	"891995648803056846354520653635957919882905363521007017169741"
+	"463296044392266269433408052686419017699718627761948763856040"
+	"592690841721239300491445991666051031755802326720329666454066"
+	"568630314348735511753639418257984253319063825247065727664852"
+	"328745422305642626091617823968872438962470092440688372515677"
+	"832232712866924800106797113478024083516199991991274936894113"
+	"006233377518471389394984262004503058455485659100090665241525"
+	"454803628182902241401701783637353179296850056973639305945938"
+	"813428953287892593620291195986011128990061888798763718548789"
+	"025717537674780281005583347165047846045925077914824515331335"
+	"131286063574407181821236377907693209224423490663289916878620"
+	"725507793163931390372011875799729330162278748985052557432333"
+	"005334989519381566364065326138465761456173231416844807264090"
+	"741841972247545424908843928136253653308813487994328446248389"
+	"608261444391573619177442907290731163188581917588219420107047"
+	"265367485141413919810885909689112244064797106324295291545892"
+	"937991321479061743491490060940946128274533657682130125169586"
+	"930571899403551122506297763180795732325134340989331155893724"
+	"289358918212707392997768032299997207208451112971425779939507"
+	"837165263255764268971211819536322993221774123134726665579460"
+	"265871378186589562858761835613344584269098062275786969729830"
+	"545786485401407774313414954958161677096004701941411411592755"
+	"485864471870515173326244464631295701572087440183178339987662"
+	"926763241220698078822661709054601073523477544653542795020468"
+	"256078409306409100874886828781860529824879343987945751252081"
+	"314345990313550683792348814627862441324030155730592166581251"
+	"009922787324590431548734575328663628650380722603024383412564"
+	"651446272117561042207738413114131099731016728935023152239431"
+	"311619533848376583687509108453086730196255111695352464186678"
+	"221927564757730319825223049341618853631333478241227227268084"
+	"583396688436229936266854011427192767039363517491659523133852"
+	"472534104124441112346615696891097070121463652258681270378076"
+	"538381697594264658479637863087159293838880752928175545408262"
+	"813403793568695416998388572304528748824756265665683890518422"
+	"696169422338806137532304784682662448207928681740476188343739"
+	"117833525916386815135793034906806117413105008719197882837614"
+	"738262050320291539494104952056471606645482046176634075459021"
+	"552555959590354956262127809953013679512507451424271839221946"
+	"794056861055980558363033732905772356986051180966474116423192"
+	"194741572438649215204229781279620370445373851348786918527399"
+	"785630808242657122705381806661616271132182017797793661244078"
+	"445747547535623384548769818529655539279036503234072455810991"
+	"588075181817695975173110136482659854557506203058080551018873"
+	"203138260451109855100526720073566126209666125604482413705611"
+	"996796777927332827103568863352291499261312290355143742018042"
+	"254470707107847293593205234049774839191754781030496978091006"
+	"099559675240966730110167624903610656473267105556155633783594"
+	"089546261107653110531808279445757724399186120387548675148632"
+	"176049190701680305210224388072261974806791922636412897526952"
+	"793677946622674149577084803568051242934076450942927092705684"
+	"547042915490323112457971853658760725588190377666477106903106"
+	"693847278847646032201293023329503348730723947218797410452333"
+	"910847913892827195814551858335519518939031446093385329182820"
+	"714173657946661746005901866885589732922652604573972842197231"
+	"187365263381958925227970038358064987248233271706462687651143"
+	"350472018043321314534759819524203308490914358596886150053406"
+	"629512434788155355109100540319857813535695923273426256911552"
+	"977539394209918630668466632881929661971212772444625151371953"
+	"428875491139683919687008724010475217255347915698820960215217"
+	"257390308560235323463096946442080548018754166369706161589705"
+	"215873687166365628787796501470056870127729464714362172216802"
+	"441045276911597009443281135389729130222603185665646434661947"
+	"627628077723219376892727386120519287577405410510114936151502"
+	"752997122750262781911372625997223415283516995479265631485799"
+	"456782561734766648462849641064097181818204279498552827825384"
+	"186202065516999362573388136163077477126602169410435905014077"
+	"049808497409025369325795765272066650278004200357878990911374"
+	"982857977108488482528354406313893864211497105765030504600982"
+	"253488805474531798742143374465080240030582370086699167937651"
+	"038307909706139327119325418854546478285735654541635477790346"
+	"964782617354265050767878335230272194896680141986745074630225"
+	"893106573559558843545841186025169531604151588481389164948914"
+	"823593944287133336263680358191369540321930649824471425485137"
+	"777984823525402115151171093313613251350685343824859052220126"
+	"891551966018355920872775724807128769003243129486808733796350"
+	"497668255116485157191011858830643898323628223472099280243583"
+	"164434348347014910398004439821970508280440872759395827943270"
+	"985008769143562351938091476215083548164137333541883808870019"
+	"116234099013452929807950151652297436436006149684939775781234"
+	"660954156154478642694176038524277810483833149798681345708089"
+	"152179193979463169402340611793486272301808073267534612685593"
+	"859596787866884211031341417903391749825320454663508370385251"
+	"831778477311017089729361152161928815389818579983544490982891"
+	"734081131312309744330960666031291451740885503458543884956367"
+	"654943799264600314531815427932691107874782328654759293575803"
+	"481929361961781073958502075438499070633193799699311694287183"
+	"299423475339817655608058724723221867087563064557636112380829"
+	"514501382073257737022472866608244164310385205213523702910787"
+	"182472517125030106491031844871593141759729773907719510044049"
+	"352857426592936763727969496103940591601975078602859660478614"
+	"119405428212830134490731706220583788265344728818766885126977"
+	"588151111984290444321648931907188080336064713873288834096229"
+	"203276676119810521851726133377700616341304257822975788967472"
+	"152742255041912584197045423031298506219011800240120182445838"
+	"590696647416285334515631019799007515682004250060857020904012"
+	"215375170479800482680554499806010766109655061507421747722461"
+	"180617361402575082294678925605271083587897845390768226405648"
+	"508518103525778638618195775128516073959272990148239415346263"
+	"486966573934577450787243667063244378381883115827207605856174"
+	"876350045086885320626669331311880593775916269643646395423220"
+	"549940790476989709243027420158390806135690975149384714684219"
+	"964938182719962913931464979458639185519531490009437619838306"
+	"362365453754807654884704163490469296444427144778593725687358"
+	"437087390151990694667516279202024332494828210657618261952038"
+	"597230263799412584275851667403910657370879707181053365818502"
+	"680037431560091209982641738995652793235851569372314130107647"
+	"166085235615697257094269133100914135783178856280392139325001"
+	"352841718610484616627448189556913621837791650699820323059708"
+	"766420810133584841826718631681683381743511974264126250984214"
+	"812397119978273917903889865891718836792263377888052458189238"
+	"746074986456016681098722869419588274020181430652732817858728"
+	"473849369539367463917171317324882099804999043054467247785592"
+	"038464723442276239896066431580123756428540074945472427752568"
+	"981171400621705853374875885943072600692576914790467205905272"
+	"372594740187988081900317493185005142913607163380720069786786"
+	"782095331840893694073778325119471833528492917081008547303414"
+	"509381563617864195257751546539575461435803625993888325647883"
+	"541039192368366987400263049681218831477776345118518503709588"
+	"840859023379762456561030683928115349942393963185677123055324"
+	"771693784214924931737043793679546051454845624150270955450608"
+	"318747395755728950832754611277041359602301205138509175543313"
+	"522772786504141007552691902249572375175731740923618769197304"
+	"652898352694386665448260033458575323252814233868098279476166"
+	"764258284911434288072243178941698347365985427696983129579496"
+	"059032032841281149923518087084876885114369033227736521245740"
+	"554711771423492719899982357711910225545480424688322195336240"
+	"492253136281857837808491795993788199125205555222116581071134"
+	"476787468430539307909617442106685159519071053844987343666452"
+	"494280317720153567054364117244775141336558406098548803924509"
+	"496052261825198043140272655303625315605326569530252885854991"
+	"822289219201218313590745412010446642247111703901991591338062"
+	"693320157180618736569439969283245279430312651192668788340033"
+	"626825194260296262959884258597703584888770801961209652822982"
+	"322376122303586169861685106043820510444293432856251210395693"
+	"261264867823980172683352796141772210301725997652373804152525"
+	"037162852291403804455997331367378463632437773242905518075065"
+	"414724295857460288225400061608664961649196400079359622673770"
+	"607898395269075056596627116148289491042491764170924014885106"
+	"158235482774778418134123293974436877051995673618683751115353"
+	"808771434984204447736174758316063096245047311279841579995578"
+	"186609402864244042751443128536278453430633423118662852688374"
+	"229600894418958824842459450540826176452145829389286103522774"
+	"101195556029650753254244433565937938526828990893149766298997"
+	"738359913887178888607190765709867052470880785937935110091424"
+	"743449966353497865681753841380246075612094033617488674676296"
+	"822570077027076266879557913673839341012099558043806442348798"
+	"053951239274913334631522409564461770434875790402230022872647"
+	"568436177018658068697071731879399180374560963492726714528729"
+	"224208938589940272515747888379118461617702271694075087419634"
+	"147298076764775745707026934442908236664400557265527951453482"
+	"191684597674273691978253678690951178777239573925410438679099"
+	"374700609973920128201422381329108236575369403675960765238333"
+	"778127017096574296148321075566959285042221837159799800133563"
+	"239963969638610872680393210300180152020613051613414547163713"
+	"772512617757277955979895866367571776456268564191092477027650"
+	"135832200376440239783726540552694851717269598489288851529660"
+	"975027775639565229734596726205832668434979354541943345062977"
+	"891187146561050118118108223323735210843681128615413601091222"
+	"007912350536959777114306541514511332368936078560929788143798"
+	"814391221507522370648646767364209132147312407014953113532379"
+	"838195728491128536978285918066991040993153064356179903885952"
+	"027952713749653604502053512355449916680887234238773855581636"
+	"172479594866871765094513940103284167914110196720261110812716"
+	"776424260154507395050380575452850420730818412994731079307343"
+	"538376880280124019321040198038723558784544408584344466090982"
+	"802067326529000931562048932875469079874956595180595395347093"
+	"285140279165467965596318365749701535812384333240968283640721"
+	"344003442002691613772056762099098025739332715913970186225176"
+	"459563484134139746647940170537900275350480490468851439300771"
+	"949915194703080576611022590670399844931867609777417528903454"
+	"731922206378932141464755402629420074293816349270038351339419"
+	"146768473851353171629153912238797141905920143036064131705230"
+	"421762305232861503856799511155936565169005916711845389135580"
+	"928162511912438531204156138447775120789548666143600293412065"
+	"767167106888509172568003530668539460588248316513392652567856"
+	"224602697296203328920073354425994044956624831346979458846837"
+	"597950064151867164583749203433942592178528868981311575331848"
+	"941597492470436782387502687532649093096498315347403977436001"
+	"399982102030846763698994785054617523241463186980898394504211"
+	"430763617825306895065661536045431497903759118007934839122881"
+	"885863091769469883539876840543521295706315919855784493235603"
+	"866268925981702690270202829595794350800918257913991744455922"
+	"683343374046671669930219650268554687501e-4951",
+	false,
+	0x0p+0,
+	0x0p+0,
+	0x0p+0,
+	0x8p-152,
+	false,
+	0x0p+0,
+	0x0p+0,
+	0x0p+0,
+	0x4p-1076,
+	false,
+	0x8p-16448,
+	0x1p-16444,
+	0x8p-16448,
+	0x1p-16444,
+	false,
+	0xcp-16448,
+	0xcp-16448,
+	0xcp-16448,
+	0x1p-16444,
+	false,
+	0x0p+0,
+	0x0p+0,
+	0x0p+0,
+	0x4p-1076,
+	false,
+	0xcp-16448,
+	0xcp-16448,
+	0xcp-16448,
+	0xc.000000000004p-16448),
+  TEST ("-5.467799297823711903792608900429129724598576223540345015581"
+	"470730542557532950096605214341062938740807795871021020805296"
+	"652950478448933048254960262113384713508225733871766897517853"
+	"837895708450339634932343848975116093410479690330290902886861"
+	"199931259216523277807574569082153073133673942958789577402321"
+	"393933101298533191266102118889630609532339508457854220031996"
+	"317935940718000325144008438048416150458546268408294693278282"
+	"948818382981756745231443707694395053270779125240469926867881"
+	"019850287125023579685557790983055974962881759919483752202903"
+	"689199564880305684635452065363595791988290536352100701716974"
+	"146329604439226626943340805268641901769971862776194876385604"
+	"059269084172123930049144599166605103175580232672032966645406"
+	"656863031434873551175363941825798425331906382524706572766485"
+	"232874542230564262609161782396887243896247009244068837251567"
+	"783223271286692480010679711347802408351619999199127493689411"
+	"300623337751847138939498426200450305845548565910009066524152"
+	"545480362818290224140170178363735317929685005697363930594593"
+	"881342895328789259362029119598601112899006188879876371854878"
+	"902571753767478028100558334716504784604592507791482451533133"
+	"513128606357440718182123637790769320922442349066328991687862"
+	"072550779316393139037201187579972933016227874898505255743233"
+	"300533498951938156636406532613846576145617323141684480726409"
+	"074184197224754542490884392813625365330881348799432844624838"
+	"960826144439157361917744290729073116318858191758821942010704"
+	"726536748514141391981088590968911224406479710632429529154589"
+	"293799132147906174349149006094094612827453365768213012516958"
+	"693057189940355112250629776318079573232513434098933115589372"
+	"428935891821270739299776803229999720720845111297142577993950"
+	"783716526325576426897121181953632299322177412313472666557946"
+	"026587137818658956285876183561334458426909806227578696972983"
+	"054578648540140777431341495495816167709600470194141141159275"
+	"548586447187051517332624446463129570157208744018317833998766"
+	"292676324122069807882266170905460107352347754465354279502046"
+	"825607840930640910087488682878186052982487934398794575125208"
+	"131434599031355068379234881462786244132403015573059216658125"
+	"100992278732459043154873457532866362865038072260302438341256"
+	"465144627211756104220773841311413109973101672893502315223943"
+	"131161953384837658368750910845308673019625511169535246418667"
+	"822192756475773031982522304934161885363133347824122722726808"
+	"458339668843622993626685401142719276703936351749165952313385"
+	"247253410412444111234661569689109707012146365225868127037807"
+	"653838169759426465847963786308715929383888075292817554540826"
+	"281340379356869541699838857230452874882475626566568389051842"
+	"269616942233880613753230478468266244820792868174047618834373"
+	"911783352591638681513579303490680611741310500871919788283761"
+	"473826205032029153949410495205647160664548204617663407545902"
+	"155255595959035495626212780995301367951250745142427183922194"
+	"679405686105598055836303373290577235698605118096647411642319"
+	"219474157243864921520422978127962037044537385134878691852739"
+	"978563080824265712270538180666161627113218201779779366124407"
+	"844574754753562338454876981852965553927903650323407245581099"
+	"158807518181769597517311013648265985455750620305808055101887"
+	"320313826045110985510052672007356612620966612560448241370561"
+	"199679677792733282710356886335229149926131229035514374201804"
+	"225447070710784729359320523404977483919175478103049697809100"
+	"609955967524096673011016762490361065647326710555615563378359"
+	"408954626110765311053180827944575772439918612038754867514863"
+	"217604919070168030521022438807226197480679192263641289752695"
+	"279367794662267414957708480356805124293407645094292709270568"
+	"454704291549032311245797185365876072558819037766647710690310"
+	"669384727884764603220129302332950334873072394721879741045233"
+	"391084791389282719581455185833551951893903144609338532918282"
+	"071417365794666174600590186688558973292265260457397284219723"
+	"118736526338195892522797003835806498724823327170646268765114"
+	"335047201804332131453475981952420330849091435859688615005340"
+	"662951243478815535510910054031985781353569592327342625691155"
+	"297753939420991863066846663288192966197121277244462515137195"
+	"342887549113968391968700872401047521725534791569882096021521"
+	"725739030856023532346309694644208054801875416636970616158970"
+	"521587368716636562878779650147005687012772946471436217221680"
+	"244104527691159700944328113538972913022260318566564643466194"
+	"762762807772321937689272738612051928757740541051011493615150"
+	"275299712275026278191137262599722341528351699547926563148579"
+	"945678256173476664846284964106409718181820427949855282782538"
+	"418620206551699936257338813616307747712660216941043590501407"
+	"704980849740902536932579576527206665027800420035787899091137"
+	"498285797710848848252835440631389386421149710576503050460098"
+	"225348880547453179874214337446508024003058237008669916793765"
+	"103830790970613932711932541885454647828573565454163547779034"
+	"696478261735426505076787833523027219489668014198674507463022"
+	"589310657355955884354584118602516953160415158848138916494891"
+	"482359394428713333626368035819136954032193064982447142548513"
+	"777798482352540211515117109331361325135068534382485905222012"
+	"689155196601835592087277572480712876900324312948680873379635"
+	"049766825511648515719101185883064389832362822347209928024358"
+	"316443434834701491039800443982197050828044087275939582794327"
+	"098500876914356235193809147621508354816413733354188380887001"
+	"911623409901345292980795015165229743643600614968493977578123"
+	"466095415615447864269417603852427781048383314979868134570808"
+	"915217919397946316940234061179348627230180807326753461268559"
+	"385959678786688421103134141790339174982532045466350837038525"
+	"183177847731101708972936115216192881538981857998354449098289"
+	"173408113131230974433096066603129145174088550345854388495636"
+	"765494379926460031453181542793269110787478232865475929357580"
+	"348192936196178107395850207543849907063319379969931169428718"
+	"329942347533981765560805872472322186708756306455763611238082"
+	"951450138207325773702247286660824416431038520521352370291078"
+	"718247251712503010649103184487159314175972977390771951004404"
+	"935285742659293676372796949610394059160197507860285966047861"
+	"411940542821283013449073170622058378826534472881876688512697"
+	"758815111198429044432164893190718808033606471387328883409622"
+	"920327667611981052185172613337770061634130425782297578896747"
+	"215274225504191258419704542303129850621901180024012018244583"
+	"859069664741628533451563101979900751568200425006085702090401"
+	"221537517047980048268055449980601076610965506150742174772246"
+	"118061736140257508229467892560527108358789784539076822640564"
+	"850851810352577863861819577512851607395927299014823941534626"
+	"348696657393457745078724366706324437838188311582720760585617"
+	"487635004508688532062666933131188059377591626964364639542322"
+	"054994079047698970924302742015839080613569097514938471468421"
+	"996493818271996291393146497945863918551953149000943761983830"
+	"636236545375480765488470416349046929644442714477859372568735"
+	"843708739015199069466751627920202433249482821065761826195203"
+	"859723026379941258427585166740391065737087970718105336581850"
+	"268003743156009120998264173899565279323585156937231413010764"
+	"716608523561569725709426913310091413578317885628039213932500"
+	"135284171861048461662744818955691362183779165069982032305970"
+	"876642081013358484182671863168168338174351197426412625098421"
+	"481239711997827391790388986589171883679226337788805245818923"
+	"874607498645601668109872286941958827402018143065273281785872"
+	"847384936953936746391717131732488209980499904305446724778559"
+	"203846472344227623989606643158012375642854007494547242775256"
+	"898117140062170585337487588594307260069257691479046720590527"
+	"237259474018798808190031749318500514291360716338072006978678"
+	"678209533184089369407377832511947183352849291708100854730341"
+	"450938156361786419525775154653957546143580362599388832564788"
+	"354103919236836698740026304968121883147777634511851850370958"
+	"884085902337976245656103068392811534994239396318567712305532"
+	"477169378421492493173704379367954605145484562415027095545060"
+	"831874739575572895083275461127704135960230120513850917554331"
+	"352277278650414100755269190224957237517573174092361876919730"
+	"465289835269438666544826003345857532325281423386809827947616"
+	"676425828491143428807224317894169834736598542769698312957949"
+	"605903203284128114992351808708487688511436903322773652124574"
+	"055471177142349271989998235771191022554548042468832219533624"
+	"049225313628185783780849179599378819912520555522211658107113"
+	"447678746843053930790961744210668515951907105384498734366645"
+	"249428031772015356705436411724477514133655840609854880392450"
+	"949605226182519804314027265530362531560532656953025288585499"
+	"182228921920121831359074541201044664224711170390199159133806"
+	"269332015718061873656943996928324527943031265119266878834003"
+	"362682519426029626295988425859770358488877080196120965282298"
+	"232237612230358616986168510604382051044429343285625121039569"
+	"326126486782398017268335279614177221030172599765237380415252"
+	"503716285229140380445599733136737846363243777324290551807506"
+	"541472429585746028822540006160866496164919640007935962267377"
+	"060789839526907505659662711614828949104249176417092401488510"
+	"615823548277477841813412329397443687705199567361868375111535"
+	"380877143498420444773617475831606309624504731127984157999557"
+	"818660940286424404275144312853627845343063342311866285268837"
+	"422960089441895882484245945054082617645214582938928610352277"
+	"410119555602965075325424443356593793852682899089314976629899"
+	"773835991388717888860719076570986705247088078593793511009142"
+	"474344996635349786568175384138024607561209403361748867467629"
+	"682257007702707626687955791367383934101209955804380644234879"
+	"805395123927491333463152240956446177043487579040223002287264"
+	"756843617701865806869707173187939918037456096349272671452872"
+	"922420893858994027251574788837911846161770227169407508741963"
+	"414729807676477574570702693444290823666440055726552795145348"
+	"219168459767427369197825367869095117877723957392541043867909"
+	"937470060997392012820142238132910823657536940367596076523833"
+	"377812701709657429614832107556695928504222183715979980013356"
+	"323996396963861087268039321030018015202061305161341454716371"
+	"377251261775727795597989586636757177645626856419109247702765"
+	"013583220037644023978372654055269485171726959848928885152966"
+	"097502777563956522973459672620583266843497935454194334506297"
+	"789118714656105011811810822332373521084368112861541360109122"
+	"200791235053695977711430654151451133236893607856092978814379"
+	"881439122150752237064864676736420913214731240701495311353237"
+	"983819572849112853697828591806699104099315306435617990388595"
+	"202795271374965360450205351235544991668088723423877385558163"
+	"617247959486687176509451394010328416791411019672026111081271"
+	"677642426015450739505038057545285042073081841299473107930734"
+	"353837688028012401932104019803872355878454440858434446609098"
+	"280206732652900093156204893287546907987495659518059539534709"
+	"328514027916546796559631836574970153581238433324096828364072"
+	"134400344200269161377205676209909802573933271591397018622517"
+	"645956348413413974664794017053790027535048049046885143930077"
+	"194991519470308057661102259067039984493186760977741752890345"
+	"473192220637893214146475540262942007429381634927003835133941"
+	"914676847385135317162915391223879714190592014303606413170523"
+	"042176230523286150385679951115593656516900591671184538913558"
+	"092816251191243853120415613844777512078954866614360029341206"
+	"576716710688850917256800353066853946058824831651339265256785"
+	"622460269729620332892007335442599404495662483134697945884683"
+	"759795006415186716458374920343394259217852886898131157533184"
+	"894159749247043678238750268753264909309649831534740397743600"
+	"139998210203084676369899478505461752324146318698089839450421"
+	"143076361782530689506566153604543149790375911800793483912288"
+	"188586309176946988353987684054352129570631591985578449323560"
+	"386626892598170269027020282959579435080091825791399174445592"
+	"2683343374046671669930219650268554687499e-4951",
+	false,
+	-0x8p-152,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0,
+	false,
+	-0x4p-1076,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0,
+	false,
+	-0x1p-16444,
+	-0x8p-16448,
+	-0x8p-16448,
+	-0x8p-16448,
+	false,
+	-0xcp-16448,
+	-0xcp-16448,
+	-0x8p-16448,
+	-0x8p-16448,
+	false,
+	-0x4p-1076,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0,
+	false,
+	-0xcp-16448,
+	-0xcp-16448,
+	-0xb.fffffffffffcp-16448,
+	-0xb.fffffffffffcp-16448),
+  TEST ("-5.467799297823711903792608900429129724598576223540345015581"
+	"470730542557532950096605214341062938740807795871021020805296"
+	"652950478448933048254960262113384713508225733871766897517853"
+	"837895708450339634932343848975116093410479690330290902886861"
+	"199931259216523277807574569082153073133673942958789577402321"
+	"393933101298533191266102118889630609532339508457854220031996"
+	"317935940718000325144008438048416150458546268408294693278282"
+	"948818382981756745231443707694395053270779125240469926867881"
+	"019850287125023579685557790983055974962881759919483752202903"
+	"689199564880305684635452065363595791988290536352100701716974"
+	"146329604439226626943340805268641901769971862776194876385604"
+	"059269084172123930049144599166605103175580232672032966645406"
+	"656863031434873551175363941825798425331906382524706572766485"
+	"232874542230564262609161782396887243896247009244068837251567"
+	"783223271286692480010679711347802408351619999199127493689411"
+	"300623337751847138939498426200450305845548565910009066524152"
+	"545480362818290224140170178363735317929685005697363930594593"
+	"881342895328789259362029119598601112899006188879876371854878"
+	"902571753767478028100558334716504784604592507791482451533133"
+	"513128606357440718182123637790769320922442349066328991687862"
+	"072550779316393139037201187579972933016227874898505255743233"
+	"300533498951938156636406532613846576145617323141684480726409"
+	"074184197224754542490884392813625365330881348799432844624838"
+	"960826144439157361917744290729073116318858191758821942010704"
+	"726536748514141391981088590968911224406479710632429529154589"
+	"293799132147906174349149006094094612827453365768213012516958"
+	"693057189940355112250629776318079573232513434098933115589372"
+	"428935891821270739299776803229999720720845111297142577993950"
+	"783716526325576426897121181953632299322177412313472666557946"
+	"026587137818658956285876183561334458426909806227578696972983"
+	"054578648540140777431341495495816167709600470194141141159275"
+	"548586447187051517332624446463129570157208744018317833998766"
+	"292676324122069807882266170905460107352347754465354279502046"
+	"825607840930640910087488682878186052982487934398794575125208"
+	"131434599031355068379234881462786244132403015573059216658125"
+	"100992278732459043154873457532866362865038072260302438341256"
+	"465144627211756104220773841311413109973101672893502315223943"
+	"131161953384837658368750910845308673019625511169535246418667"
+	"822192756475773031982522304934161885363133347824122722726808"
+	"458339668843622993626685401142719276703936351749165952313385"
+	"247253410412444111234661569689109707012146365225868127037807"
+	"653838169759426465847963786308715929383888075292817554540826"
+	"281340379356869541699838857230452874882475626566568389051842"
+	"269616942233880613753230478468266244820792868174047618834373"
+	"911783352591638681513579303490680611741310500871919788283761"
+	"473826205032029153949410495205647160664548204617663407545902"
+	"155255595959035495626212780995301367951250745142427183922194"
+	"679405686105598055836303373290577235698605118096647411642319"
+	"219474157243864921520422978127962037044537385134878691852739"
+	"978563080824265712270538180666161627113218201779779366124407"
+	"844574754753562338454876981852965553927903650323407245581099"
+	"158807518181769597517311013648265985455750620305808055101887"
+	"320313826045110985510052672007356612620966612560448241370561"
+	"199679677792733282710356886335229149926131229035514374201804"
+	"225447070710784729359320523404977483919175478103049697809100"
+	"609955967524096673011016762490361065647326710555615563378359"
+	"408954626110765311053180827944575772439918612038754867514863"
+	"217604919070168030521022438807226197480679192263641289752695"
+	"279367794662267414957708480356805124293407645094292709270568"
+	"454704291549032311245797185365876072558819037766647710690310"
+	"669384727884764603220129302332950334873072394721879741045233"
+	"391084791389282719581455185833551951893903144609338532918282"
+	"071417365794666174600590186688558973292265260457397284219723"
+	"118736526338195892522797003835806498724823327170646268765114"
+	"335047201804332131453475981952420330849091435859688615005340"
+	"662951243478815535510910054031985781353569592327342625691155"
+	"297753939420991863066846663288192966197121277244462515137195"
+	"342887549113968391968700872401047521725534791569882096021521"
+	"725739030856023532346309694644208054801875416636970616158970"
+	"521587368716636562878779650147005687012772946471436217221680"
+	"244104527691159700944328113538972913022260318566564643466194"
+	"762762807772321937689272738612051928757740541051011493615150"
+	"275299712275026278191137262599722341528351699547926563148579"
+	"945678256173476664846284964106409718181820427949855282782538"
+	"418620206551699936257338813616307747712660216941043590501407"
+	"704980849740902536932579576527206665027800420035787899091137"
+	"498285797710848848252835440631389386421149710576503050460098"
+	"225348880547453179874214337446508024003058237008669916793765"
+	"103830790970613932711932541885454647828573565454163547779034"
+	"696478261735426505076787833523027219489668014198674507463022"
+	"589310657355955884354584118602516953160415158848138916494891"
+	"482359394428713333626368035819136954032193064982447142548513"
+	"777798482352540211515117109331361325135068534382485905222012"
+	"689155196601835592087277572480712876900324312948680873379635"
+	"049766825511648515719101185883064389832362822347209928024358"
+	"316443434834701491039800443982197050828044087275939582794327"
+	"098500876914356235193809147621508354816413733354188380887001"
+	"911623409901345292980795015165229743643600614968493977578123"
+	"466095415615447864269417603852427781048383314979868134570808"
+	"915217919397946316940234061179348627230180807326753461268559"
+	"385959678786688421103134141790339174982532045466350837038525"
+	"183177847731101708972936115216192881538981857998354449098289"
+	"173408113131230974433096066603129145174088550345854388495636"
+	"765494379926460031453181542793269110787478232865475929357580"
+	"348192936196178107395850207543849907063319379969931169428718"
+	"329942347533981765560805872472322186708756306455763611238082"
+	"951450138207325773702247286660824416431038520521352370291078"
+	"718247251712503010649103184487159314175972977390771951004404"
+	"935285742659293676372796949610394059160197507860285966047861"
+	"411940542821283013449073170622058378826534472881876688512697"
+	"758815111198429044432164893190718808033606471387328883409622"
+	"920327667611981052185172613337770061634130425782297578896747"
+	"215274225504191258419704542303129850621901180024012018244583"
+	"859069664741628533451563101979900751568200425006085702090401"
+	"221537517047980048268055449980601076610965506150742174772246"
+	"118061736140257508229467892560527108358789784539076822640564"
+	"850851810352577863861819577512851607395927299014823941534626"
+	"348696657393457745078724366706324437838188311582720760585617"
+	"487635004508688532062666933131188059377591626964364639542322"
+	"054994079047698970924302742015839080613569097514938471468421"
+	"996493818271996291393146497945863918551953149000943761983830"
+	"636236545375480765488470416349046929644442714477859372568735"
+	"843708739015199069466751627920202433249482821065761826195203"
+	"859723026379941258427585166740391065737087970718105336581850"
+	"268003743156009120998264173899565279323585156937231413010764"
+	"716608523561569725709426913310091413578317885628039213932500"
+	"135284171861048461662744818955691362183779165069982032305970"
+	"876642081013358484182671863168168338174351197426412625098421"
+	"481239711997827391790388986589171883679226337788805245818923"
+	"874607498645601668109872286941958827402018143065273281785872"
+	"847384936953936746391717131732488209980499904305446724778559"
+	"203846472344227623989606643158012375642854007494547242775256"
+	"898117140062170585337487588594307260069257691479046720590527"
+	"237259474018798808190031749318500514291360716338072006978678"
+	"678209533184089369407377832511947183352849291708100854730341"
+	"450938156361786419525775154653957546143580362599388832564788"
+	"354103919236836698740026304968121883147777634511851850370958"
+	"884085902337976245656103068392811534994239396318567712305532"
+	"477169378421492493173704379367954605145484562415027095545060"
+	"831874739575572895083275461127704135960230120513850917554331"
+	"352277278650414100755269190224957237517573174092361876919730"
+	"465289835269438666544826003345857532325281423386809827947616"
+	"676425828491143428807224317894169834736598542769698312957949"
+	"605903203284128114992351808708487688511436903322773652124574"
+	"055471177142349271989998235771191022554548042468832219533624"
+	"049225313628185783780849179599378819912520555522211658107113"
+	"447678746843053930790961744210668515951907105384498734366645"
+	"249428031772015356705436411724477514133655840609854880392450"
+	"949605226182519804314027265530362531560532656953025288585499"
+	"182228921920121831359074541201044664224711170390199159133806"
+	"269332015718061873656943996928324527943031265119266878834003"
+	"362682519426029626295988425859770358488877080196120965282298"
+	"232237612230358616986168510604382051044429343285625121039569"
+	"326126486782398017268335279614177221030172599765237380415252"
+	"503716285229140380445599733136737846363243777324290551807506"
+	"541472429585746028822540006160866496164919640007935962267377"
+	"060789839526907505659662711614828949104249176417092401488510"
+	"615823548277477841813412329397443687705199567361868375111535"
+	"380877143498420444773617475831606309624504731127984157999557"
+	"818660940286424404275144312853627845343063342311866285268837"
+	"422960089441895882484245945054082617645214582938928610352277"
+	"410119555602965075325424443356593793852682899089314976629899"
+	"773835991388717888860719076570986705247088078593793511009142"
+	"474344996635349786568175384138024607561209403361748867467629"
+	"682257007702707626687955791367383934101209955804380644234879"
+	"805395123927491333463152240956446177043487579040223002287264"
+	"756843617701865806869707173187939918037456096349272671452872"
+	"922420893858994027251574788837911846161770227169407508741963"
+	"414729807676477574570702693444290823666440055726552795145348"
+	"219168459767427369197825367869095117877723957392541043867909"
+	"937470060997392012820142238132910823657536940367596076523833"
+	"377812701709657429614832107556695928504222183715979980013356"
+	"323996396963861087268039321030018015202061305161341454716371"
+	"377251261775727795597989586636757177645626856419109247702765"
+	"013583220037644023978372654055269485171726959848928885152966"
+	"097502777563956522973459672620583266843497935454194334506297"
+	"789118714656105011811810822332373521084368112861541360109122"
+	"200791235053695977711430654151451133236893607856092978814379"
+	"881439122150752237064864676736420913214731240701495311353237"
+	"983819572849112853697828591806699104099315306435617990388595"
+	"202795271374965360450205351235544991668088723423877385558163"
+	"617247959486687176509451394010328416791411019672026111081271"
+	"677642426015450739505038057545285042073081841299473107930734"
+	"353837688028012401932104019803872355878454440858434446609098"
+	"280206732652900093156204893287546907987495659518059539534709"
+	"328514027916546796559631836574970153581238433324096828364072"
+	"134400344200269161377205676209909802573933271591397018622517"
+	"645956348413413974664794017053790027535048049046885143930077"
+	"194991519470308057661102259067039984493186760977741752890345"
+	"473192220637893214146475540262942007429381634927003835133941"
+	"914676847385135317162915391223879714190592014303606413170523"
+	"042176230523286150385679951115593656516900591671184538913558"
+	"092816251191243853120415613844777512078954866614360029341206"
+	"576716710688850917256800353066853946058824831651339265256785"
+	"622460269729620332892007335442599404495662483134697945884683"
+	"759795006415186716458374920343394259217852886898131157533184"
+	"894159749247043678238750268753264909309649831534740397743600"
+	"139998210203084676369899478505461752324146318698089839450421"
+	"143076361782530689506566153604543149790375911800793483912288"
+	"188586309176946988353987684054352129570631591985578449323560"
+	"386626892598170269027020282959579435080091825791399174445592"
+	"26833433740466716699302196502685546875e-4951",
+	false,
+	-0x8p-152,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0,
+	false,
+	-0x4p-1076,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0,
+	false,
+	-0x1p-16444,
+	-0x1p-16444,
+	-0x8p-16448,
+	-0x8p-16448,
+	true,
+	-0xcp-16448,
+	-0xcp-16448,
+	-0xcp-16448,
+	-0xcp-16448,
+	false,
+	-0x4p-1076,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0,
+	true,
+	-0xcp-16448,
+	-0xcp-16448,
+	-0xcp-16448,
+	-0xcp-16448),
+  TEST ("-5.467799297823711903792608900429129724598576223540345015581"
+	"470730542557532950096605214341062938740807795871021020805296"
+	"652950478448933048254960262113384713508225733871766897517853"
+	"837895708450339634932343848975116093410479690330290902886861"
+	"199931259216523277807574569082153073133673942958789577402321"
+	"393933101298533191266102118889630609532339508457854220031996"
+	"317935940718000325144008438048416150458546268408294693278282"
+	"948818382981756745231443707694395053270779125240469926867881"
+	"019850287125023579685557790983055974962881759919483752202903"
+	"689199564880305684635452065363595791988290536352100701716974"
+	"146329604439226626943340805268641901769971862776194876385604"
+	"059269084172123930049144599166605103175580232672032966645406"
+	"656863031434873551175363941825798425331906382524706572766485"
+	"232874542230564262609161782396887243896247009244068837251567"
+	"783223271286692480010679711347802408351619999199127493689411"
+	"300623337751847138939498426200450305845548565910009066524152"
+	"545480362818290224140170178363735317929685005697363930594593"
+	"881342895328789259362029119598601112899006188879876371854878"
+	"902571753767478028100558334716504784604592507791482451533133"
+	"513128606357440718182123637790769320922442349066328991687862"
+	"072550779316393139037201187579972933016227874898505255743233"
+	"300533498951938156636406532613846576145617323141684480726409"
+	"074184197224754542490884392813625365330881348799432844624838"
+	"960826144439157361917744290729073116318858191758821942010704"
+	"726536748514141391981088590968911224406479710632429529154589"
+	"293799132147906174349149006094094612827453365768213012516958"
+	"693057189940355112250629776318079573232513434098933115589372"
+	"428935891821270739299776803229999720720845111297142577993950"
+	"783716526325576426897121181953632299322177412313472666557946"
+	"026587137818658956285876183561334458426909806227578696972983"
+	"054578648540140777431341495495816167709600470194141141159275"
+	"548586447187051517332624446463129570157208744018317833998766"
+	"292676324122069807882266170905460107352347754465354279502046"
+	"825607840930640910087488682878186052982487934398794575125208"
+	"131434599031355068379234881462786244132403015573059216658125"
+	"100992278732459043154873457532866362865038072260302438341256"
+	"465144627211756104220773841311413109973101672893502315223943"
+	"131161953384837658368750910845308673019625511169535246418667"
+	"822192756475773031982522304934161885363133347824122722726808"
+	"458339668843622993626685401142719276703936351749165952313385"
+	"247253410412444111234661569689109707012146365225868127037807"
+	"653838169759426465847963786308715929383888075292817554540826"
+	"281340379356869541699838857230452874882475626566568389051842"
+	"269616942233880613753230478468266244820792868174047618834373"
+	"911783352591638681513579303490680611741310500871919788283761"
+	"473826205032029153949410495205647160664548204617663407545902"
+	"155255595959035495626212780995301367951250745142427183922194"
+	"679405686105598055836303373290577235698605118096647411642319"
+	"219474157243864921520422978127962037044537385134878691852739"
+	"978563080824265712270538180666161627113218201779779366124407"
+	"844574754753562338454876981852965553927903650323407245581099"
+	"158807518181769597517311013648265985455750620305808055101887"
+	"320313826045110985510052672007356612620966612560448241370561"
+	"199679677792733282710356886335229149926131229035514374201804"
+	"225447070710784729359320523404977483919175478103049697809100"
+	"609955967524096673011016762490361065647326710555615563378359"
+	"408954626110765311053180827944575772439918612038754867514863"
+	"217604919070168030521022438807226197480679192263641289752695"
+	"279367794662267414957708480356805124293407645094292709270568"
+	"454704291549032311245797185365876072558819037766647710690310"
+	"669384727884764603220129302332950334873072394721879741045233"
+	"391084791389282719581455185833551951893903144609338532918282"
+	"071417365794666174600590186688558973292265260457397284219723"
+	"118736526338195892522797003835806498724823327170646268765114"
+	"335047201804332131453475981952420330849091435859688615005340"
+	"662951243478815535510910054031985781353569592327342625691155"
+	"297753939420991863066846663288192966197121277244462515137195"
+	"342887549113968391968700872401047521725534791569882096021521"
+	"725739030856023532346309694644208054801875416636970616158970"
+	"521587368716636562878779650147005687012772946471436217221680"
+	"244104527691159700944328113538972913022260318566564643466194"
+	"762762807772321937689272738612051928757740541051011493615150"
+	"275299712275026278191137262599722341528351699547926563148579"
+	"945678256173476664846284964106409718181820427949855282782538"
+	"418620206551699936257338813616307747712660216941043590501407"
+	"704980849740902536932579576527206665027800420035787899091137"
+	"498285797710848848252835440631389386421149710576503050460098"
+	"225348880547453179874214337446508024003058237008669916793765"
+	"103830790970613932711932541885454647828573565454163547779034"
+	"696478261735426505076787833523027219489668014198674507463022"
+	"589310657355955884354584118602516953160415158848138916494891"
+	"482359394428713333626368035819136954032193064982447142548513"
+	"777798482352540211515117109331361325135068534382485905222012"
+	"689155196601835592087277572480712876900324312948680873379635"
+	"049766825511648515719101185883064389832362822347209928024358"
+	"316443434834701491039800443982197050828044087275939582794327"
+	"098500876914356235193809147621508354816413733354188380887001"
+	"911623409901345292980795015165229743643600614968493977578123"
+	"466095415615447864269417603852427781048383314979868134570808"
+	"915217919397946316940234061179348627230180807326753461268559"
+	"385959678786688421103134141790339174982532045466350837038525"
+	"183177847731101708972936115216192881538981857998354449098289"
+	"173408113131230974433096066603129145174088550345854388495636"
+	"765494379926460031453181542793269110787478232865475929357580"
+	"348192936196178107395850207543849907063319379969931169428718"
+	"329942347533981765560805872472322186708756306455763611238082"
+	"951450138207325773702247286660824416431038520521352370291078"
+	"718247251712503010649103184487159314175972977390771951004404"
+	"935285742659293676372796949610394059160197507860285966047861"
+	"411940542821283013449073170622058378826534472881876688512697"
+	"758815111198429044432164893190718808033606471387328883409622"
+	"920327667611981052185172613337770061634130425782297578896747"
+	"215274225504191258419704542303129850621901180024012018244583"
+	"859069664741628533451563101979900751568200425006085702090401"
+	"221537517047980048268055449980601076610965506150742174772246"
+	"118061736140257508229467892560527108358789784539076822640564"
+	"850851810352577863861819577512851607395927299014823941534626"
+	"348696657393457745078724366706324437838188311582720760585617"
+	"487635004508688532062666933131188059377591626964364639542322"
+	"054994079047698970924302742015839080613569097514938471468421"
+	"996493818271996291393146497945863918551953149000943761983830"
+	"636236545375480765488470416349046929644442714477859372568735"
+	"843708739015199069466751627920202433249482821065761826195203"
+	"859723026379941258427585166740391065737087970718105336581850"
+	"268003743156009120998264173899565279323585156937231413010764"
+	"716608523561569725709426913310091413578317885628039213932500"
+	"135284171861048461662744818955691362183779165069982032305970"
+	"876642081013358484182671863168168338174351197426412625098421"
+	"481239711997827391790388986589171883679226337788805245818923"
+	"874607498645601668109872286941958827402018143065273281785872"
+	"847384936953936746391717131732488209980499904305446724778559"
+	"203846472344227623989606643158012375642854007494547242775256"
+	"898117140062170585337487588594307260069257691479046720590527"
+	"237259474018798808190031749318500514291360716338072006978678"
+	"678209533184089369407377832511947183352849291708100854730341"
+	"450938156361786419525775154653957546143580362599388832564788"
+	"354103919236836698740026304968121883147777634511851850370958"
+	"884085902337976245656103068392811534994239396318567712305532"
+	"477169378421492493173704379367954605145484562415027095545060"
+	"831874739575572895083275461127704135960230120513850917554331"
+	"352277278650414100755269190224957237517573174092361876919730"
+	"465289835269438666544826003345857532325281423386809827947616"
+	"676425828491143428807224317894169834736598542769698312957949"
+	"605903203284128114992351808708487688511436903322773652124574"
+	"055471177142349271989998235771191022554548042468832219533624"
+	"049225313628185783780849179599378819912520555522211658107113"
+	"447678746843053930790961744210668515951907105384498734366645"
+	"249428031772015356705436411724477514133655840609854880392450"
+	"949605226182519804314027265530362531560532656953025288585499"
+	"182228921920121831359074541201044664224711170390199159133806"
+	"269332015718061873656943996928324527943031265119266878834003"
+	"362682519426029626295988425859770358488877080196120965282298"
+	"232237612230358616986168510604382051044429343285625121039569"
+	"326126486782398017268335279614177221030172599765237380415252"
+	"503716285229140380445599733136737846363243777324290551807506"
+	"541472429585746028822540006160866496164919640007935962267377"
+	"060789839526907505659662711614828949104249176417092401488510"
+	"615823548277477841813412329397443687705199567361868375111535"
+	"380877143498420444773617475831606309624504731127984157999557"
+	"818660940286424404275144312853627845343063342311866285268837"
+	"422960089441895882484245945054082617645214582938928610352277"
+	"410119555602965075325424443356593793852682899089314976629899"
+	"773835991388717888860719076570986705247088078593793511009142"
+	"474344996635349786568175384138024607561209403361748867467629"
+	"682257007702707626687955791367383934101209955804380644234879"
+	"805395123927491333463152240956446177043487579040223002287264"
+	"756843617701865806869707173187939918037456096349272671452872"
+	"922420893858994027251574788837911846161770227169407508741963"
+	"414729807676477574570702693444290823666440055726552795145348"
+	"219168459767427369197825367869095117877723957392541043867909"
+	"937470060997392012820142238132910823657536940367596076523833"
+	"377812701709657429614832107556695928504222183715979980013356"
+	"323996396963861087268039321030018015202061305161341454716371"
+	"377251261775727795597989586636757177645626856419109247702765"
+	"013583220037644023978372654055269485171726959848928885152966"
+	"097502777563956522973459672620583266843497935454194334506297"
+	"789118714656105011811810822332373521084368112861541360109122"
+	"200791235053695977711430654151451133236893607856092978814379"
+	"881439122150752237064864676736420913214731240701495311353237"
+	"983819572849112853697828591806699104099315306435617990388595"
+	"202795271374965360450205351235544991668088723423877385558163"
+	"617247959486687176509451394010328416791411019672026111081271"
+	"677642426015450739505038057545285042073081841299473107930734"
+	"353837688028012401932104019803872355878454440858434446609098"
+	"280206732652900093156204893287546907987495659518059539534709"
+	"328514027916546796559631836574970153581238433324096828364072"
+	"134400344200269161377205676209909802573933271591397018622517"
+	"645956348413413974664794017053790027535048049046885143930077"
+	"194991519470308057661102259067039984493186760977741752890345"
+	"473192220637893214146475540262942007429381634927003835133941"
+	"914676847385135317162915391223879714190592014303606413170523"
+	"042176230523286150385679951115593656516900591671184538913558"
+	"092816251191243853120415613844777512078954866614360029341206"
+	"576716710688850917256800353066853946058824831651339265256785"
+	"622460269729620332892007335442599404495662483134697945884683"
+	"759795006415186716458374920343394259217852886898131157533184"
+	"894159749247043678238750268753264909309649831534740397743600"
+	"139998210203084676369899478505461752324146318698089839450421"
+	"143076361782530689506566153604543149790375911800793483912288"
+	"188586309176946988353987684054352129570631591985578449323560"
+	"386626892598170269027020282959579435080091825791399174445592"
+	"2683343374046671669930219650268554687501e-4951",
+	false,
+	-0x8p-152,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0,
+	false,
+	-0x4p-1076,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0,
+	false,
+	-0x1p-16444,
+	-0x1p-16444,
+	-0x8p-16448,
+	-0x8p-16448,
+	false,
+	-0x1p-16444,
+	-0xcp-16448,
+	-0xcp-16448,
+	-0xcp-16448,
+	false,
+	-0x4p-1076,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0,
+	false,
+	-0xc.000000000004p-16448,
+	-0xcp-16448,
+	-0xcp-16448,
+	-0xcp-16448),
+  TEST ("-0x0.7p-149",
+	false,
+	-0x8p-152,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0,
+	true,
+	-0x3.8p-152,
+	-0x3.8p-152,
+	-0x3.8p-152,
+	-0x3.8p-152,
+	true,
+	-0x3.8p-152,
+	-0x3.8p-152,
+	-0x3.8p-152,
+	-0x3.8p-152,
+	true,
+	-0x3.8p-152,
+	-0x3.8p-152,
+	-0x3.8p-152,
+	-0x3.8p-152,
+	true,
+	-0x3.8p-152,
+	-0x3.8p-152,
+	-0x3.8p-152,
+	-0x3.8p-152,
+	true,
+	-0x3.8p-152,
+	-0x3.8p-152,
+	-0x3.8p-152,
+	-0x3.8p-152),
+  TEST ("-0x0.7p-1074",
+	false,
+	-0x8p-152,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0,
+	false,
+	-0x4p-1076,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0,
+	true,
+	-0x1.cp-1076,
+	-0x1.cp-1076,
+	-0x1.cp-1076,
+	-0x1.cp-1076,
+	true,
+	-0x1.cp-1076,
+	-0x1.cp-1076,
+	-0x1.cp-1076,
+	-0x1.cp-1076,
+	false,
+	-0x4p-1076,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0,
+	true,
+	-0x1.cp-1076,
+	-0x1.cp-1076,
+	-0x1.cp-1076,
+	-0x1.cp-1076),
+  TEST ("-0x0.7p-16445",
+	false,
+	-0x8p-152,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0,
+	false,
+	-0x4p-1076,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0,
+	false,
+	-0x8p-16448,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0,
+	false,
+	-0x4p-16448,
+	-0x4p-16448,
+	-0x0p+0,
+	-0x0p+0,
+	false,
+	-0x4p-1076,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0,
+	true,
+	-0x3.8p-16448,
+	-0x3.8p-16448,
+	-0x3.8p-16448,
+	-0x3.8p-16448),
+  TEST ("-0x0.7p-16494",
+	false,
+	-0x8p-152,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0,
+	false,
+	-0x4p-1076,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0,
+	false,
+	-0x8p-16448,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0,
+	false,
+	-0x4p-16448,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0,
+	false,
+	-0x4p-1076,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0,
+	false,
+	-0x4p-16496,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0),
+  TEST ("0x1p-150",
+	false,
+	0x0p+0,
+	0x0p+0,
+	0x0p+0,
+	0x8p-152,
+	true,
+	0x4p-152,
+	0x4p-152,
+	0x4p-152,
+	0x4p-152,
+	true,
+	0x4p-152,
+	0x4p-152,
+	0x4p-152,
+	0x4p-152,
+	true,
+	0x4p-152,
+	0x4p-152,
+	0x4p-152,
+	0x4p-152,
+	true,
+	0x4p-152,
+	0x4p-152,
+	0x4p-152,
+	0x4p-152,
+	true,
+	0x4p-152,
+	0x4p-152,
+	0x4p-152,
+	0x4p-152),
+  TEST ("0x1p-1075",
+	false,
+	0x0p+0,
+	0x0p+0,
+	0x0p+0,
+	0x8p-152,
+	false,
+	0x0p+0,
+	0x0p+0,
+	0x0p+0,
+	0x4p-1076,
+	true,
+	0x2p-1076,
+	0x2p-1076,
+	0x2p-1076,
+	0x2p-1076,
+	true,
+	0x2p-1076,
+	0x2p-1076,
+	0x2p-1076,
+	0x2p-1076,
+	false,
+	0x0p+0,
+	0x0p+0,
+	0x0p+0,
+	0x4p-1076,
+	true,
+	0x2p-1076,
+	0x2p-1076,
+	0x2p-1076,
+	0x2p-1076),
+  TEST ("0x1p-16446",
+	false,
+	0x0p+0,
+	0x0p+0,
+	0x0p+0,
+	0x8p-152,
+	false,
+	0x0p+0,
+	0x0p+0,
+	0x0p+0,
+	0x4p-1076,
+	false,
+	0x0p+0,
+	0x0p+0,
+	0x0p+0,
+	0x8p-16448,
+	true,
+	0x4p-16448,
+	0x4p-16448,
+	0x4p-16448,
+	0x4p-16448,
+	false,
+	0x0p+0,
+	0x0p+0,
+	0x0p+0,
+	0x4p-1076,
+	true,
+	0x4p-16448,
+	0x4p-16448,
+	0x4p-16448,
+	0x4p-16448),
+  TEST ("0x1p-16495",
+	false,
+	0x0p+0,
+	0x0p+0,
+	0x0p+0,
+	0x8p-152,
+	false,
+	0x0p+0,
+	0x0p+0,
+	0x0p+0,
+	0x4p-1076,
+	false,
+	0x0p+0,
+	0x0p+0,
+	0x0p+0,
+	0x8p-16448,
+	false,
+	0x0p+0,
+	0x0p+0,
+	0x0p+0,
+	0x4p-16448,
+	false,
+	0x0p+0,
+	0x0p+0,
+	0x0p+0,
+	0x4p-1076,
+	false,
+	0x0p+0,
+	0x0p+0,
+	0x0p+0,
+	0x4p-16496),
+  TEST ("-0x1p-150",
+	false,
+	-0x8p-152,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0,
+	true,
+	-0x4p-152,
+	-0x4p-152,
+	-0x4p-152,
+	-0x4p-152,
+	true,
+	-0x4p-152,
+	-0x4p-152,
+	-0x4p-152,
+	-0x4p-152,
+	true,
+	-0x4p-152,
+	-0x4p-152,
+	-0x4p-152,
+	-0x4p-152,
+	true,
+	-0x4p-152,
+	-0x4p-152,
+	-0x4p-152,
+	-0x4p-152,
+	true,
+	-0x4p-152,
+	-0x4p-152,
+	-0x4p-152,
+	-0x4p-152),
+  TEST ("-0x1p-1075",
+	false,
+	-0x8p-152,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0,
+	false,
+	-0x4p-1076,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0,
+	true,
+	-0x2p-1076,
+	-0x2p-1076,
+	-0x2p-1076,
+	-0x2p-1076,
+	true,
+	-0x2p-1076,
+	-0x2p-1076,
+	-0x2p-1076,
+	-0x2p-1076,
+	false,
+	-0x4p-1076,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0,
+	true,
+	-0x2p-1076,
+	-0x2p-1076,
+	-0x2p-1076,
+	-0x2p-1076),
+  TEST ("-0x1p-16446",
+	false,
+	-0x8p-152,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0,
+	false,
+	-0x4p-1076,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0,
+	false,
+	-0x8p-16448,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0,
+	true,
+	-0x4p-16448,
+	-0x4p-16448,
+	-0x4p-16448,
+	-0x4p-16448,
+	false,
+	-0x4p-1076,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0,
+	true,
+	-0x4p-16448,
+	-0x4p-16448,
+	-0x4p-16448,
+	-0x4p-16448),
+  TEST ("-0x1p-16495",
+	false,
+	-0x8p-152,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0,
+	false,
+	-0x4p-1076,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0,
+	false,
+	-0x8p-16448,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0,
+	false,
+	-0x4p-16448,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0,
+	false,
+	-0x4p-1076,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0,
+	false,
+	-0x4p-16496,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0),
+  TEST (".70064923216240853546186479164495807e-45",
+	false,
+	0x0p+0,
+	0x8p-152,
+	0x0p+0,
+	0x8p-152,
+	false,
+	0x4p-152,
+	0x4p-152,
+	0x4p-152,
+	0x4.0000000000004p-152,
+	false,
+	0x4p-152,
+	0x4p-152,
+	0x4p-152,
+	0x4.0000000000000008p-152,
+	false,
+	0x4p-152,
+	0x4p-152,
+	0x4p-152,
+	0x4.0000000000000008p-152,
+	false,
+	0x4p-152,
+	0x4p-152,
+	0x4p-152,
+	0x4.00000000000000000000000002p-152,
+	false,
+	0x4p-152,
+	0x4p-152,
+	0x4p-152,
+	0x4.0000000000000000000000000004p-152),
+  TEST ("7.0064923216240853546186479164495806564013097093825788587853"
+	"4141944895541342930300743319094181060791015624e-46",
+	false,
+	0x0p+0,
+	0x0p+0,
+	0x0p+0,
+	0x8p-152,
+	false,
+	0x3.ffffffffffffep-152,
+	0x4p-152,
+	0x3.ffffffffffffep-152,
+	0x4p-152,
+	false,
+	0x3.fffffffffffffffcp-152,
+	0x4p-152,
+	0x3.fffffffffffffffcp-152,
+	0x4p-152,
+	false,
+	0x3.fffffffffffffffcp-152,
+	0x4p-152,
+	0x3.fffffffffffffffcp-152,
+	0x4p-152,
+	false,
+	0x3.ffffffffffffffffffffffffffp-152,
+	0x4p-152,
+	0x3.ffffffffffffffffffffffffffp-152,
+	0x4p-152,
+	false,
+	0x3.fffffffffffffffffffffffffffep-152,
+	0x4p-152,
+	0x3.fffffffffffffffffffffffffffep-152,
+	0x4p-152),
+  TEST ("7.0064923216240853546186479164495806564013097093825788587853"
+	"4141944895541342930300743319094181060791015625e-46",
+	false,
+	0x0p+0,
+	0x0p+0,
+	0x0p+0,
+	0x8p-152,
+	true,
+	0x4p-152,
+	0x4p-152,
+	0x4p-152,
+	0x4p-152,
+	true,
+	0x4p-152,
+	0x4p-152,
+	0x4p-152,
+	0x4p-152,
+	true,
+	0x4p-152,
+	0x4p-152,
+	0x4p-152,
+	0x4p-152,
+	true,
+	0x4p-152,
+	0x4p-152,
+	0x4p-152,
+	0x4p-152,
+	true,
+	0x4p-152,
+	0x4p-152,
+	0x4p-152,
+	0x4p-152),
+  TEST ("7.0064923216240853546186479164495806564013097093825788587853"
+	"4141944895541342930300743319094181060791015626e-46",
+	false,
+	0x0p+0,
+	0x8p-152,
+	0x0p+0,
+	0x8p-152,
+	false,
+	0x4p-152,
+	0x4p-152,
+	0x4p-152,
+	0x4.0000000000004p-152,
+	false,
+	0x4p-152,
+	0x4p-152,
+	0x4p-152,
+	0x4.0000000000000008p-152,
+	false,
+	0x4p-152,
+	0x4p-152,
+	0x4p-152,
+	0x4.0000000000000008p-152,
+	false,
+	0x4p-152,
+	0x4p-152,
+	0x4p-152,
+	0x4.00000000000000000000000002p-152,
+	false,
+	0x4p-152,
+	0x4p-152,
+	0x4p-152,
+	0x4.0000000000000000000000000004p-152),
+  TEST ("-7.006492321624085354618647916449580656401309709382578858785"
+	"34141944895541342930300743319094181060791015624e-46",
+	false,
+	-0x8p-152,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0,
+	false,
+	-0x4p-152,
+	-0x4p-152,
+	-0x3.ffffffffffffep-152,
+	-0x3.ffffffffffffep-152,
+	false,
+	-0x4p-152,
+	-0x4p-152,
+	-0x3.fffffffffffffffcp-152,
+	-0x3.fffffffffffffffcp-152,
+	false,
+	-0x4p-152,
+	-0x4p-152,
+	-0x3.fffffffffffffffcp-152,
+	-0x3.fffffffffffffffcp-152,
+	false,
+	-0x4p-152,
+	-0x4p-152,
+	-0x3.ffffffffffffffffffffffffffp-152,
+	-0x3.ffffffffffffffffffffffffffp-152,
+	false,
+	-0x4p-152,
+	-0x4p-152,
+	-0x3.fffffffffffffffffffffffffffep-152,
+	-0x3.fffffffffffffffffffffffffffep-152),
+  TEST ("-7.006492321624085354618647916449580656401309709382578858785"
+	"34141944895541342930300743319094181060791015625e-46",
+	false,
+	-0x8p-152,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0,
+	true,
+	-0x4p-152,
+	-0x4p-152,
+	-0x4p-152,
+	-0x4p-152,
+	true,
+	-0x4p-152,
+	-0x4p-152,
+	-0x4p-152,
+	-0x4p-152,
+	true,
+	-0x4p-152,
+	-0x4p-152,
+	-0x4p-152,
+	-0x4p-152,
+	true,
+	-0x4p-152,
+	-0x4p-152,
+	-0x4p-152,
+	-0x4p-152,
+	true,
+	-0x4p-152,
+	-0x4p-152,
+	-0x4p-152,
+	-0x4p-152),
+  TEST ("-7.006492321624085354618647916449580656401309709382578858785"
+	"34141944895541342930300743319094181060791015626e-46",
+	false,
+	-0x8p-152,
+	-0x8p-152,
+	-0x0p+0,
+	-0x0p+0,
+	false,
+	-0x4.0000000000004p-152,
+	-0x4p-152,
+	-0x4p-152,
+	-0x4p-152,
+	false,
+	-0x4.0000000000000008p-152,
+	-0x4p-152,
+	-0x4p-152,
+	-0x4p-152,
+	false,
+	-0x4.0000000000000008p-152,
+	-0x4p-152,
+	-0x4p-152,
+	-0x4p-152,
+	false,
+	-0x4.00000000000000000000000002p-152,
+	-0x4p-152,
+	-0x4p-152,
+	-0x4p-152,
+	false,
+	-0x4.0000000000000000000000000004p-152,
+	-0x4p-152,
+	-0x4p-152,
+	-0x4p-152),
+  TEST ("2.4703282292062327208828439643411068618252990130716238221279"
+	"284125033775363510437593264991818081799618989828234772285886"
+	"546332835517796989819938739800539093906315035659515570226392"
+	"290858392449105184435931802849936536152500319370457678249219"
+	"365623669863658480757001585769269903706311928279558551332927"
+	"834338409351978015531246597263579574622766465272827220056374"
+	"006485499977096599470454020828166226237857393450736339007967"
+	"761930577506740176324673600968951340535537458516661134223766"
+	"678604162159680461914467291840300530057530849048765391711386"
+	"591646239524912623653881879636239373280423891018672348497668"
+	"235089863388587925628302755995657524455507255189313690836254"
+	"779186948667994968324049705821028513185451396213837722826145"
+	"437693412532098591327667236328124e-324",
+	false,
+	0x0p+0,
+	0x0p+0,
+	0x0p+0,
+	0x8p-152,
+	false,
+	0x0p+0,
+	0x0p+0,
+	0x0p+0,
+	0x4p-1076,
+	false,
+	0x1.fffffffffffffffep-1076,
+	0x2p-1076,
+	0x1.fffffffffffffffep-1076,
+	0x2p-1076,
+	false,
+	0x1.fffffffffffffffep-1076,
+	0x2p-1076,
+	0x1.fffffffffffffffep-1076,
+	0x2p-1076,
+	false,
+	0x0p+0,
+	0x0p+0,
+	0x0p+0,
+	0x4p-1076,
+	false,
+	0x1.ffffffffffffffffffffffffffffp-1076,
+	0x2p-1076,
+	0x1.ffffffffffffffffffffffffffffp-1076,
+	0x2p-1076),
+  TEST ("2.4703282292062327208828439643411068618252990130716238221279"
+	"284125033775363510437593264991818081799618989828234772285886"
+	"546332835517796989819938739800539093906315035659515570226392"
+	"290858392449105184435931802849936536152500319370457678249219"
+	"365623669863658480757001585769269903706311928279558551332927"
+	"834338409351978015531246597263579574622766465272827220056374"
+	"006485499977096599470454020828166226237857393450736339007967"
+	"761930577506740176324673600968951340535537458516661134223766"
+	"678604162159680461914467291840300530057530849048765391711386"
+	"591646239524912623653881879636239373280423891018672348497668"
+	"235089863388587925628302755995657524455507255189313690836254"
+	"779186948667994968324049705821028513185451396213837722826145"
+	"437693412532098591327667236328125e-324",
+	false,
+	0x0p+0,
+	0x0p+0,
+	0x0p+0,
+	0x8p-152,
+	false,
+	0x0p+0,
+	0x0p+0,
+	0x0p+0,
+	0x4p-1076,
+	true,
+	0x2p-1076,
+	0x2p-1076,
+	0x2p-1076,
+	0x2p-1076,
+	true,
+	0x2p-1076,
+	0x2p-1076,
+	0x2p-1076,
+	0x2p-1076,
+	false,
+	0x0p+0,
+	0x0p+0,
+	0x0p+0,
+	0x4p-1076,
+	true,
+	0x2p-1076,
+	0x2p-1076,
+	0x2p-1076,
+	0x2p-1076),
+  TEST ("2.4703282292062327208828439643411068618252990130716238221279"
+	"284125033775363510437593264991818081799618989828234772285886"
+	"546332835517796989819938739800539093906315035659515570226392"
+	"290858392449105184435931802849936536152500319370457678249219"
+	"365623669863658480757001585769269903706311928279558551332927"
+	"834338409351978015531246597263579574622766465272827220056374"
+	"006485499977096599470454020828166226237857393450736339007967"
+	"761930577506740176324673600968951340535537458516661134223766"
+	"678604162159680461914467291840300530057530849048765391711386"
+	"591646239524912623653881879636239373280423891018672348497668"
+	"235089863388587925628302755995657524455507255189313690836254"
+	"779186948667994968324049705821028513185451396213837722826145"
+	"437693412532098591327667236328126e-324",
+	false,
+	0x0p+0,
+	0x0p+0,
+	0x0p+0,
+	0x8p-152,
+	false,
+	0x0p+0,
+	0x4p-1076,
+	0x0p+0,
+	0x4p-1076,
+	false,
+	0x2p-1076,
+	0x2p-1076,
+	0x2p-1076,
+	0x2.0000000000000004p-1076,
+	false,
+	0x2p-1076,
+	0x2p-1076,
+	0x2p-1076,
+	0x2.0000000000000004p-1076,
+	false,
+	0x0p+0,
+	0x4p-1076,
+	0x0p+0,
+	0x4p-1076,
+	false,
+	0x2p-1076,
+	0x2p-1076,
+	0x2p-1076,
+	0x2.0000000000000000000000000002p-1076),
+  TEST ("-2.470328229206232720882843964341106861825299013071623822127"
+	"928412503377536351043759326499181808179961898982823477228588"
+	"654633283551779698981993873980053909390631503565951557022639"
+	"229085839244910518443593180284993653615250031937045767824921"
+	"936562366986365848075700158576926990370631192827955855133292"
+	"783433840935197801553124659726357957462276646527282722005637"
+	"400648549997709659947045402082816622623785739345073633900796"
+	"776193057750674017632467360096895134053553745851666113422376"
+	"667860416215968046191446729184030053005753084904876539171138"
+	"659164623952491262365388187963623937328042389101867234849766"
+	"823508986338858792562830275599565752445550725518931369083625"
+	"477918694866799496832404970582102851318545139621383772282614"
+	"5437693412532098591327667236328124e-324",
+	false,
+	-0x8p-152,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0,
+	false,
+	-0x4p-1076,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0,
+	false,
+	-0x2p-1076,
+	-0x2p-1076,
+	-0x1.fffffffffffffffep-1076,
+	-0x1.fffffffffffffffep-1076,
+	false,
+	-0x2p-1076,
+	-0x2p-1076,
+	-0x1.fffffffffffffffep-1076,
+	-0x1.fffffffffffffffep-1076,
+	false,
+	-0x4p-1076,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0,
+	false,
+	-0x2p-1076,
+	-0x2p-1076,
+	-0x1.ffffffffffffffffffffffffffffp-1076,
+	-0x1.ffffffffffffffffffffffffffffp-1076),
+  TEST ("-2.470328229206232720882843964341106861825299013071623822127"
+	"928412503377536351043759326499181808179961898982823477228588"
+	"654633283551779698981993873980053909390631503565951557022639"
+	"229085839244910518443593180284993653615250031937045767824921"
+	"936562366986365848075700158576926990370631192827955855133292"
+	"783433840935197801553124659726357957462276646527282722005637"
+	"400648549997709659947045402082816622623785739345073633900796"
+	"776193057750674017632467360096895134053553745851666113422376"
+	"667860416215968046191446729184030053005753084904876539171138"
+	"659164623952491262365388187963623937328042389101867234849766"
+	"823508986338858792562830275599565752445550725518931369083625"
+	"477918694866799496832404970582102851318545139621383772282614"
+	"5437693412532098591327667236328125e-324",
+	false,
+	-0x8p-152,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0,
+	false,
+	-0x4p-1076,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0,
+	true,
+	-0x2p-1076,
+	-0x2p-1076,
+	-0x2p-1076,
+	-0x2p-1076,
+	true,
+	-0x2p-1076,
+	-0x2p-1076,
+	-0x2p-1076,
+	-0x2p-1076,
+	false,
+	-0x4p-1076,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0,
+	true,
+	-0x2p-1076,
+	-0x2p-1076,
+	-0x2p-1076,
+	-0x2p-1076),
+  TEST ("-2.470328229206232720882843964341106861825299013071623822127"
+	"928412503377536351043759326499181808179961898982823477228588"
+	"654633283551779698981993873980053909390631503565951557022639"
+	"229085839244910518443593180284993653615250031937045767824921"
+	"936562366986365848075700158576926990370631192827955855133292"
+	"783433840935197801553124659726357957462276646527282722005637"
+	"400648549997709659947045402082816622623785739345073633900796"
+	"776193057750674017632467360096895134053553745851666113422376"
+	"667860416215968046191446729184030053005753084904876539171138"
+	"659164623952491262365388187963623937328042389101867234849766"
+	"823508986338858792562830275599565752445550725518931369083625"
+	"477918694866799496832404970582102851318545139621383772282614"
+	"5437693412532098591327667236328126e-324",
+	false,
+	-0x8p-152,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0,
+	false,
+	-0x4p-1076,
+	-0x4p-1076,
+	-0x0p+0,
+	-0x0p+0,
+	false,
+	-0x2.0000000000000004p-1076,
+	-0x2p-1076,
+	-0x2p-1076,
+	-0x2p-1076,
+	false,
+	-0x2.0000000000000004p-1076,
+	-0x2p-1076,
+	-0x2p-1076,
+	-0x2p-1076,
+	false,
+	-0x4p-1076,
+	-0x4p-1076,
+	-0x0p+0,
+	-0x0p+0,
+	false,
+	-0x2.0000000000000000000000000002p-1076,
+	-0x2p-1076,
+	-0x2p-1076,
+	-0x2p-1076),
+  TEST ("1.8225997659412373012642029668097099081995254078467816718604"
+	"902435141858443166988684047803543129136025986236736736017655"
+	"509834928163110160849867540377949045027419112905889658392846"
+	"126319028167798783107812829917053644701598967767636342956203"
+	"999770864055077592691915230273843577112246476529298591341071"
+	"313110337661777304220340396298768698441131694859514066773321"
+	"059786469060001083813361460161387168195154228027648977594276"
+	"496061276605855817438145692314650177569263750801566422892936"
+	"732834290416745265618525969943519916542939199731612507343012"
+	"297331882934352282118173551211985973294301787840335672389913"
+	"821098681464088756477802684228806339233239542587316254618680"
+	"197563613907079766830481997222017010585267442240109888818022"
+	"189543438116245170584546472752661417773021275082355242554950"
+	"776248474101880875363872607989624146320823364146896124171892"
+	"610744237622308266702265704492674694505399997330424978964704"
+	"335411125839490463131661420668167686151828553033363555080508"
+	"484934542727634080467233927879117726432283352324546435315312"
+	"937809651095964197873430398662003709663353962932921239516263"
+	"008572512558260093668527782388349282015308359304941505110445"
+	"043762021191469060607078792635897736408141163554429972292873"
+	"575169264387977130124003958599909776720759582995017519144111"
+	"001778329839793855454688442046155253818724410472281602421363"
+	"580613990749181808302947976045417884436271162664776148749463"
+	"202753814797191206392480969096910387729527305862739806702349"
+	"088455828380471306603628636563037414688265702108098430515297"
+	"645997107159687247830496686980315376091511219227376708389862"
+	"310190633134517040835432587726931910775044780329777051964574"
+	"763119639404235797665922677433332402402817037657141926646502"
+	"612388421085254756323737273178774331073924707711575555193153"
+	"421957126062196520952920611871114861423032687425262323243276"
+	"848595495133802591437804984986053892365334900647137137197585"
+	"161954823956838391108748154877098567190695813394392779995887"
+	"642254413740232692940887236351533691174492514884514265006822"
+	"752026136435469700291628942927286843274959781329315250417360"
+	"438115330104516894597449604875954147108010051910197388860417"
+	"003307595774863477182911525109554542883460240867674794470854"
+	"883815424039187014069246137704710366577005576311674384079810"
+	"437206511282792194562503036151028910065418370565117488062226"
+	"073975854919243439941741016447206284543777826080409075756028"
+	"194465562812076645422284670475730922346454505830553174377950"
+	"824178034708147037448871898963699023373821217419560423459358"
+	"846127232531421552826545954362386431279626917642725181802754"
+	"271134597856231805666129524101509582941585421888561296839474"
+	"232056474112935379177434928227554149402642893913492062781246"
+	"372611175305462271711931011635602039137701669573065960945871"
+	"579420683440097179831368317352157202215160682058878025153007"
+	"184185319863451652087375936651004559837502483808090613073982"
+	"264685620351993519454344577635257452328683726988824705474397"
+	"398247190812883071734743260426540123481791283782928972842466"
+	"595210269414219040901793935553872090377394005932597887081359"
+	"481915849178541128182923272843218513093012167744690818603663"
+	"862691727272565325057703378827553284852502067686026850339624"
+	"401046086817036618366842240024522042069888708534827471235203"
+	"998932259309110942367856287784097166420437430118381247339347"
+	"418156902369282431197735078016591613063918260343498992697002"
+	"033186558413655576703389208301203552157755701852051877927864"
+	"696515420369217703510602759815252574799728706795849558382877"
+	"392016396900560101736741462690753991602263974212137632508984"
+	"264559315540891383192361601189350414311358816980975697568561"
+	"515680971830107704152657284552920241862730125888825702301035"
+	"564615759615882010733764341109834449576907982406265803484111"
+	"303615971297609065271517286111839839646343815364461776394273"
+	"571391219315553915335300622295196577640884201524657614065743"
+	"729121754460652975075990012786021662416077757235487562550381"
+	"116824006014440438178253273174734436163638119532295383351135"
+	"543170811596051785036366846773285937845231974424475418970517"
+	"659179798069972876889488877627309887323737590814875050457317"
+	"809625163713227973229002908003491739085115971899606986738405"
+	"752463436186745107821032315480693516006251388789902053863235"
+	"071957895722121876262598833823352290042576488238120724072267"
+	"480348425637199003147760378463243043407534395221882144887315"
+	"875876025907739792297575795373506429192468470170038312050500"
+	"917665707583420927303790875332407805094505665159755210495266"
+	"485594187244922216154283213688032393939401426499517609275128"
+	"062067355172333120857796045387692492375534056470145301671359"
+	"016602832469675123108598588424022216759334733452626330303791"
+	"660952659036162827509451468771297954737165701921676834866994"
+	"084496268491510599580714458155026746676860790028899722645883"
+	"679435969902046442373108472951515492761911884847211825930115"
+	"654927539118088350255959445076757398298893380662248358210075"
+	"297702191186519614515280395341723177201383862827129721649638"
+	"274531314762377778754560119397123180107310216608157141828379"
+	"259328274508467371717057031104537750450228447941619684073375"
+	"630517322006118640290925241602376256334414376495602911265450"
+	"165889418372161719063670619610214632774542741157366426747861"
+	"054811449449004970132668146607323502760146957586465275981090"
+	"328336256381187450646030492071694516054712444513961269623339"
+	"705411366337817643269316717217432478812002049894979925260411"
+	"553651385384826214231392012841425936827944383266227115236029"
+	"717393064659821056467446870597828757433936024422511537561864"
+	"619865595955628070343780472634463916608440151554502790128417"
+	"277259492437005696576453717387309605129939526661181496994297"
+	"244693710437436581443653555343763817246961834486181294985455"
+	"884981266421533438177271809310897035958260776218253097858601"
+	"160643120653927024652834025146166356877731266566437231429061"
+	"099807825113272551869352908241073955695854354852545370793609"
+	"838167127357752579007490955536081388103461735071174567636929"
+	"060824172375010035497010614957197713919909924635906503348016"
+	"450952475530978921242656498701313530533991692867619886826204"
+	"706468476070943378163577235406861262755114909606255628375659"
+	"196050370661430148107216310635729360112021571291096278032076"
+	"401092225373270173950575377792566872113768085940991929655824"
+	"050914085013970861399015141010432835406337266746706727481946"
+	"196898882472095111505210339933002505227334750020285673634670"
+	"738458390159933494226851499935336922036551687169140582574153"
+	"726872453800858360764892975201757027862632615130256075468549"
+	"502839367841926212872731925042838691319757663382746471782087"
+	"828988857978192483595747889021081459460627705275735868618724"
+	"958783348362295106875556443770626864591972089881215465141073"
+	"516646930158996569747675806719463602045230325049794904894739"
+	"988312727573320971310488326486213061839843830003145873279435"
+	"454121817918269218294901387830156432148142381592864575229119"
+	"479029130050663564889172093067341444164942736885872753984012"
+	"865743421266470861425283889134636885790293235727017788606167"
+	"560012477186697069994213912998550931078617189790771376702549"
+	"055361745205232419031423044366971378594392952093464046441667"
+	"117613906203494872209149396518971207279263883566606774353236"
+	"255473603377861613942239543893894460581170658088042083661404"
+	"937465706659424639301296621963906278930754459296017486063079"
+	"582024995485338893699574289806529424673393810217577605952909"
+	"491283123179789154639057105774960699934999681018155749261864"
+	"012821574480758746632022143860041252142846691648490809250856"
+	"327057133540568617791625295314357533564192304930155735301757"
+	"457531580062662693966772497728335047637869054460240023262262"
+	"260698443946964564691259441706490611176164305693669515767804"
+	"836460521205954731752583848846525153811934541997962775215961"
+	"180346397456122329133421016560406277159258781706172834569862"
+	"946953007793254152187010227976038449980797987728559041018441"
+	"590564594738308310579014597893182017151615208050090318483536"
+	"106249131918576316944251537092347119867433735046169725181104"
+	"507590928834713669184230634083190791725243913641206256399101"
+	"550966117564795555149420011152858441084271411289366093158722"
+	"254752761637144762690747726313899449121995142565661043193165"
+	"353010677613760383307839362361625628371456344409245507081913"
+	"518237257141164239966660785903970075181826808229440731778746"
+	"830751045427285945936163931997929399708401851740705527023711"
+	"492262489476846435969872480702228386506357017948329114555484"
+	"164760105906717855684788039081591713778852802032849601308169"
+	"832017420608399347713424218434541771868442189843417628618330"
+	"607429739733739437863581804003482214082370567967330530446020"
+	"897773385726872912189813323094415093143437550397556262780011"
+	"208941731420098754319961419532567861629590267320403217607660"
+	"774125374101195389953895035347940170148097810952083736798564"
+	"420421622607993390894450932047257403433908665884124601384175"
+	"012387617430467934818665777122459487877479257747635172691688"
+	"471574765285820096075133353869554987216398800026453207557923"
+	"535966131756358352198875705382763163680830588056974671628368"
+	"719411827591592806044707764658145625683998557872894583705117"
+	"936257144994734815912058252772021032081682437093280526665192"
+	"728869800954748014250481042845426151143544474372887617562791"
+	"409866964806319608280819816846942058817381943129762034507591"
+	"367065185343216917751414811188645979508942996964383255432999"
+	"246119971295726296202396921903289017490293595312645036697141"
+	"581149988784499288560584613793415358537364677872496224892098"
+	"940856692342358755626519304557946447004033186014602147449599"
+	"351317079758304444877174136521487256811625263467410007624215"
+	"856145392339552689565690577293133060124853654497575571509576"
+	"408069646196646757505249296126372820539234090564691695806544"
+	"715766025588258581902342311480969412221466852421842650484494"
+	"063894865891424563992751226230317059592413191308470146226366"
+	"458233536657973376067140793776369412191789801225320255079444"
+	"592709005698858098716107025188986428347407279053266600044521"
+	"079987989879536957560131070100060050673537683871138182387904"
+	"590837539252425985326631955455857258818756188063697492342550"
+	"045277400125480079927908846850898283905756532829762950509886"
+	"991675925213188409911532242068610889478326451513981115020992"
+	"630395715520350039372702741107911736947893709538471200363740"
+	"669304116845653259038102180504837110789645359520309929381266"
+	"271463740502507456882882255788069710715770802338317704510793"
+	"279398576163709512326095306022330346997717688118726634628650"
+	"675984237916551201500684504118483305560295744746257951860545"
+	"390826531622290588364837980034428055971370065573420370270905"
+	"592141420051502465016793525150950140243606137664910359769114"
+	"512792293426708006440346732679574519594848136194781488696994"
+	"267355775509666977187349644291823026624985531726865131782364"
+	"428380093055155988532106121916567178604128111080322761213573"
+	"781334480667563871257352254033032675246444238637990062075058"
+	"819854494711379915549313390179300091783493496822950479766923"
+	"983305064901026858870340863556799948310622536592472509634484"
+	"910640735459644047154918467543140024764605449756679450446473"
+	"048922824617117723876384637412932380635306714345354710568410"
+	"140587435077620501285599837051978855056335305570615129711860"
+	"309387503970812843734718712815925040263182888714533431137355"
+	"255722368962836390856001176889513153529416105504464217522618"
+	"741534232432067776306691118141998014985541610448993152948945"
+	"865983354717289054861249734477980864059509622993770525110616"
+	"313865830823478927462500895844216364365499438449134659145333"
+	"799994034010282254566331595018205841080487728993632798168070"
+	"476921205941768965021887178681810499301253039335978279707627"
+	"295287697256489961179958946847840431902105306618594831078534"
+	"622089641993900896756734276531931450266972752637997248151974"
+	"2277811246822238899767398834228515624e-4951",
+	false,
+	0x0p+0,
+	0x0p+0,
+	0x0p+0,
+	0x8p-152,
+	false,
+	0x0p+0,
+	0x0p+0,
+	0x0p+0,
+	0x4p-1076,
+	false,
+	0x0p+0,
+	0x0p+0,
+	0x0p+0,
+	0x8p-16448,
+	false,
+	0x0p+0,
+	0x4p-16448,
+	0x0p+0,
+	0x4p-16448,
+	false,
+	0x0p+0,
+	0x0p+0,
+	0x0p+0,
+	0x4p-1076,
+	false,
+	0x3.fffffffffffcp-16448,
+	0x4p-16448,
+	0x3.fffffffffffcp-16448,
+	0x4p-16448),
+  TEST ("1.8225997659412373012642029668097099081995254078467816718604"
+	"902435141858443166988684047803543129136025986236736736017655"
+	"509834928163110160849867540377949045027419112905889658392846"
+	"126319028167798783107812829917053644701598967767636342956203"
+	"999770864055077592691915230273843577112246476529298591341071"
+	"313110337661777304220340396298768698441131694859514066773321"
+	"059786469060001083813361460161387168195154228027648977594276"
+	"496061276605855817438145692314650177569263750801566422892936"
+	"732834290416745265618525969943519916542939199731612507343012"
+	"297331882934352282118173551211985973294301787840335672389913"
+	"821098681464088756477802684228806339233239542587316254618680"
+	"197563613907079766830481997222017010585267442240109888818022"
+	"189543438116245170584546472752661417773021275082355242554950"
+	"776248474101880875363872607989624146320823364146896124171892"
+	"610744237622308266702265704492674694505399997330424978964704"
+	"335411125839490463131661420668167686151828553033363555080508"
+	"484934542727634080467233927879117726432283352324546435315312"
+	"937809651095964197873430398662003709663353962932921239516263"
+	"008572512558260093668527782388349282015308359304941505110445"
+	"043762021191469060607078792635897736408141163554429972292873"
+	"575169264387977130124003958599909776720759582995017519144111"
+	"001778329839793855454688442046155253818724410472281602421363"
+	"580613990749181808302947976045417884436271162664776148749463"
+	"202753814797191206392480969096910387729527305862739806702349"
+	"088455828380471306603628636563037414688265702108098430515297"
+	"645997107159687247830496686980315376091511219227376708389862"
+	"310190633134517040835432587726931910775044780329777051964574"
+	"763119639404235797665922677433332402402817037657141926646502"
+	"612388421085254756323737273178774331073924707711575555193153"
+	"421957126062196520952920611871114861423032687425262323243276"
+	"848595495133802591437804984986053892365334900647137137197585"
+	"161954823956838391108748154877098567190695813394392779995887"
+	"642254413740232692940887236351533691174492514884514265006822"
+	"752026136435469700291628942927286843274959781329315250417360"
+	"438115330104516894597449604875954147108010051910197388860417"
+	"003307595774863477182911525109554542883460240867674794470854"
+	"883815424039187014069246137704710366577005576311674384079810"
+	"437206511282792194562503036151028910065418370565117488062226"
+	"073975854919243439941741016447206284543777826080409075756028"
+	"194465562812076645422284670475730922346454505830553174377950"
+	"824178034708147037448871898963699023373821217419560423459358"
+	"846127232531421552826545954362386431279626917642725181802754"
+	"271134597856231805666129524101509582941585421888561296839474"
+	"232056474112935379177434928227554149402642893913492062781246"
+	"372611175305462271711931011635602039137701669573065960945871"
+	"579420683440097179831368317352157202215160682058878025153007"
+	"184185319863451652087375936651004559837502483808090613073982"
+	"264685620351993519454344577635257452328683726988824705474397"
+	"398247190812883071734743260426540123481791283782928972842466"
+	"595210269414219040901793935553872090377394005932597887081359"
+	"481915849178541128182923272843218513093012167744690818603663"
+	"862691727272565325057703378827553284852502067686026850339624"
+	"401046086817036618366842240024522042069888708534827471235203"
+	"998932259309110942367856287784097166420437430118381247339347"
+	"418156902369282431197735078016591613063918260343498992697002"
+	"033186558413655576703389208301203552157755701852051877927864"
+	"696515420369217703510602759815252574799728706795849558382877"
+	"392016396900560101736741462690753991602263974212137632508984"
+	"264559315540891383192361601189350414311358816980975697568561"
+	"515680971830107704152657284552920241862730125888825702301035"
+	"564615759615882010733764341109834449576907982406265803484111"
+	"303615971297609065271517286111839839646343815364461776394273"
+	"571391219315553915335300622295196577640884201524657614065743"
+	"729121754460652975075990012786021662416077757235487562550381"
+	"116824006014440438178253273174734436163638119532295383351135"
+	"543170811596051785036366846773285937845231974424475418970517"
+	"659179798069972876889488877627309887323737590814875050457317"
+	"809625163713227973229002908003491739085115971899606986738405"
+	"752463436186745107821032315480693516006251388789902053863235"
+	"071957895722121876262598833823352290042576488238120724072267"
+	"480348425637199003147760378463243043407534395221882144887315"
+	"875876025907739792297575795373506429192468470170038312050500"
+	"917665707583420927303790875332407805094505665159755210495266"
+	"485594187244922216154283213688032393939401426499517609275128"
+	"062067355172333120857796045387692492375534056470145301671359"
+	"016602832469675123108598588424022216759334733452626330303791"
+	"660952659036162827509451468771297954737165701921676834866994"
+	"084496268491510599580714458155026746676860790028899722645883"
+	"679435969902046442373108472951515492761911884847211825930115"
+	"654927539118088350255959445076757398298893380662248358210075"
+	"297702191186519614515280395341723177201383862827129721649638"
+	"274531314762377778754560119397123180107310216608157141828379"
+	"259328274508467371717057031104537750450228447941619684073375"
+	"630517322006118640290925241602376256334414376495602911265450"
+	"165889418372161719063670619610214632774542741157366426747861"
+	"054811449449004970132668146607323502760146957586465275981090"
+	"328336256381187450646030492071694516054712444513961269623339"
+	"705411366337817643269316717217432478812002049894979925260411"
+	"553651385384826214231392012841425936827944383266227115236029"
+	"717393064659821056467446870597828757433936024422511537561864"
+	"619865595955628070343780472634463916608440151554502790128417"
+	"277259492437005696576453717387309605129939526661181496994297"
+	"244693710437436581443653555343763817246961834486181294985455"
+	"884981266421533438177271809310897035958260776218253097858601"
+	"160643120653927024652834025146166356877731266566437231429061"
+	"099807825113272551869352908241073955695854354852545370793609"
+	"838167127357752579007490955536081388103461735071174567636929"
+	"060824172375010035497010614957197713919909924635906503348016"
+	"450952475530978921242656498701313530533991692867619886826204"
+	"706468476070943378163577235406861262755114909606255628375659"
+	"196050370661430148107216310635729360112021571291096278032076"
+	"401092225373270173950575377792566872113768085940991929655824"
+	"050914085013970861399015141010432835406337266746706727481946"
+	"196898882472095111505210339933002505227334750020285673634670"
+	"738458390159933494226851499935336922036551687169140582574153"
+	"726872453800858360764892975201757027862632615130256075468549"
+	"502839367841926212872731925042838691319757663382746471782087"
+	"828988857978192483595747889021081459460627705275735868618724"
+	"958783348362295106875556443770626864591972089881215465141073"
+	"516646930158996569747675806719463602045230325049794904894739"
+	"988312727573320971310488326486213061839843830003145873279435"
+	"454121817918269218294901387830156432148142381592864575229119"
+	"479029130050663564889172093067341444164942736885872753984012"
+	"865743421266470861425283889134636885790293235727017788606167"
+	"560012477186697069994213912998550931078617189790771376702549"
+	"055361745205232419031423044366971378594392952093464046441667"
+	"117613906203494872209149396518971207279263883566606774353236"
+	"255473603377861613942239543893894460581170658088042083661404"
+	"937465706659424639301296621963906278930754459296017486063079"
+	"582024995485338893699574289806529424673393810217577605952909"
+	"491283123179789154639057105774960699934999681018155749261864"
+	"012821574480758746632022143860041252142846691648490809250856"
+	"327057133540568617791625295314357533564192304930155735301757"
+	"457531580062662693966772497728335047637869054460240023262262"
+	"260698443946964564691259441706490611176164305693669515767804"
+	"836460521205954731752583848846525153811934541997962775215961"
+	"180346397456122329133421016560406277159258781706172834569862"
+	"946953007793254152187010227976038449980797987728559041018441"
+	"590564594738308310579014597893182017151615208050090318483536"
+	"106249131918576316944251537092347119867433735046169725181104"
+	"507590928834713669184230634083190791725243913641206256399101"
+	"550966117564795555149420011152858441084271411289366093158722"
+	"254752761637144762690747726313899449121995142565661043193165"
+	"353010677613760383307839362361625628371456344409245507081913"
+	"518237257141164239966660785903970075181826808229440731778746"
+	"830751045427285945936163931997929399708401851740705527023711"
+	"492262489476846435969872480702228386506357017948329114555484"
+	"164760105906717855684788039081591713778852802032849601308169"
+	"832017420608399347713424218434541771868442189843417628618330"
+	"607429739733739437863581804003482214082370567967330530446020"
+	"897773385726872912189813323094415093143437550397556262780011"
+	"208941731420098754319961419532567861629590267320403217607660"
+	"774125374101195389953895035347940170148097810952083736798564"
+	"420421622607993390894450932047257403433908665884124601384175"
+	"012387617430467934818665777122459487877479257747635172691688"
+	"471574765285820096075133353869554987216398800026453207557923"
+	"535966131756358352198875705382763163680830588056974671628368"
+	"719411827591592806044707764658145625683998557872894583705117"
+	"936257144994734815912058252772021032081682437093280526665192"
+	"728869800954748014250481042845426151143544474372887617562791"
+	"409866964806319608280819816846942058817381943129762034507591"
+	"367065185343216917751414811188645979508942996964383255432999"
+	"246119971295726296202396921903289017490293595312645036697141"
+	"581149988784499288560584613793415358537364677872496224892098"
+	"940856692342358755626519304557946447004033186014602147449599"
+	"351317079758304444877174136521487256811625263467410007624215"
+	"856145392339552689565690577293133060124853654497575571509576"
+	"408069646196646757505249296126372820539234090564691695806544"
+	"715766025588258581902342311480969412221466852421842650484494"
+	"063894865891424563992751226230317059592413191308470146226366"
+	"458233536657973376067140793776369412191789801225320255079444"
+	"592709005698858098716107025188986428347407279053266600044521"
+	"079987989879536957560131070100060050673537683871138182387904"
+	"590837539252425985326631955455857258818756188063697492342550"
+	"045277400125480079927908846850898283905756532829762950509886"
+	"991675925213188409911532242068610889478326451513981115020992"
+	"630395715520350039372702741107911736947893709538471200363740"
+	"669304116845653259038102180504837110789645359520309929381266"
+	"271463740502507456882882255788069710715770802338317704510793"
+	"279398576163709512326095306022330346997717688118726634628650"
+	"675984237916551201500684504118483305560295744746257951860545"
+	"390826531622290588364837980034428055971370065573420370270905"
+	"592141420051502465016793525150950140243606137664910359769114"
+	"512792293426708006440346732679574519594848136194781488696994"
+	"267355775509666977187349644291823026624985531726865131782364"
+	"428380093055155988532106121916567178604128111080322761213573"
+	"781334480667563871257352254033032675246444238637990062075058"
+	"819854494711379915549313390179300091783493496822950479766923"
+	"983305064901026858870340863556799948310622536592472509634484"
+	"910640735459644047154918467543140024764605449756679450446473"
+	"048922824617117723876384637412932380635306714345354710568410"
+	"140587435077620501285599837051978855056335305570615129711860"
+	"309387503970812843734718712815925040263182888714533431137355"
+	"255722368962836390856001176889513153529416105504464217522618"
+	"741534232432067776306691118141998014985541610448993152948945"
+	"865983354717289054861249734477980864059509622993770525110616"
+	"313865830823478927462500895844216364365499438449134659145333"
+	"799994034010282254566331595018205841080487728993632798168070"
+	"476921205941768965021887178681810499301253039335978279707627"
+	"295287697256489961179958946847840431902105306618594831078534"
+	"622089641993900896756734276531931450266972752637997248151974"
+	"2277811246822238899767398834228515625e-4951",
+	false,
+	0x0p+0,
+	0x0p+0,
+	0x0p+0,
+	0x8p-152,
+	false,
+	0x0p+0,
+	0x0p+0,
+	0x0p+0,
+	0x4p-1076,
+	false,
+	0x0p+0,
+	0x0p+0,
+	0x0p+0,
+	0x8p-16448,
+	true,
+	0x4p-16448,
+	0x4p-16448,
+	0x4p-16448,
+	0x4p-16448,
+	false,
+	0x0p+0,
+	0x0p+0,
+	0x0p+0,
+	0x4p-1076,
+	true,
+	0x4p-16448,
+	0x4p-16448,
+	0x4p-16448,
+	0x4p-16448),
+  TEST ("1.8225997659412373012642029668097099081995254078467816718604"
+	"902435141858443166988684047803543129136025986236736736017655"
+	"509834928163110160849867540377949045027419112905889658392846"
+	"126319028167798783107812829917053644701598967767636342956203"
+	"999770864055077592691915230273843577112246476529298591341071"
+	"313110337661777304220340396298768698441131694859514066773321"
+	"059786469060001083813361460161387168195154228027648977594276"
+	"496061276605855817438145692314650177569263750801566422892936"
+	"732834290416745265618525969943519916542939199731612507343012"
+	"297331882934352282118173551211985973294301787840335672389913"
+	"821098681464088756477802684228806339233239542587316254618680"
+	"197563613907079766830481997222017010585267442240109888818022"
+	"189543438116245170584546472752661417773021275082355242554950"
+	"776248474101880875363872607989624146320823364146896124171892"
+	"610744237622308266702265704492674694505399997330424978964704"
+	"335411125839490463131661420668167686151828553033363555080508"
+	"484934542727634080467233927879117726432283352324546435315312"
+	"937809651095964197873430398662003709663353962932921239516263"
+	"008572512558260093668527782388349282015308359304941505110445"
+	"043762021191469060607078792635897736408141163554429972292873"
+	"575169264387977130124003958599909776720759582995017519144111"
+	"001778329839793855454688442046155253818724410472281602421363"
+	"580613990749181808302947976045417884436271162664776148749463"
+	"202753814797191206392480969096910387729527305862739806702349"
+	"088455828380471306603628636563037414688265702108098430515297"
+	"645997107159687247830496686980315376091511219227376708389862"
+	"310190633134517040835432587726931910775044780329777051964574"
+	"763119639404235797665922677433332402402817037657141926646502"
+	"612388421085254756323737273178774331073924707711575555193153"
+	"421957126062196520952920611871114861423032687425262323243276"
+	"848595495133802591437804984986053892365334900647137137197585"
+	"161954823956838391108748154877098567190695813394392779995887"
+	"642254413740232692940887236351533691174492514884514265006822"
+	"752026136435469700291628942927286843274959781329315250417360"
+	"438115330104516894597449604875954147108010051910197388860417"
+	"003307595774863477182911525109554542883460240867674794470854"
+	"883815424039187014069246137704710366577005576311674384079810"
+	"437206511282792194562503036151028910065418370565117488062226"
+	"073975854919243439941741016447206284543777826080409075756028"
+	"194465562812076645422284670475730922346454505830553174377950"
+	"824178034708147037448871898963699023373821217419560423459358"
+	"846127232531421552826545954362386431279626917642725181802754"
+	"271134597856231805666129524101509582941585421888561296839474"
+	"232056474112935379177434928227554149402642893913492062781246"
+	"372611175305462271711931011635602039137701669573065960945871"
+	"579420683440097179831368317352157202215160682058878025153007"
+	"184185319863451652087375936651004559837502483808090613073982"
+	"264685620351993519454344577635257452328683726988824705474397"
+	"398247190812883071734743260426540123481791283782928972842466"
+	"595210269414219040901793935553872090377394005932597887081359"
+	"481915849178541128182923272843218513093012167744690818603663"
+	"862691727272565325057703378827553284852502067686026850339624"
+	"401046086817036618366842240024522042069888708534827471235203"
+	"998932259309110942367856287784097166420437430118381247339347"
+	"418156902369282431197735078016591613063918260343498992697002"
+	"033186558413655576703389208301203552157755701852051877927864"
+	"696515420369217703510602759815252574799728706795849558382877"
+	"392016396900560101736741462690753991602263974212137632508984"
+	"264559315540891383192361601189350414311358816980975697568561"
+	"515680971830107704152657284552920241862730125888825702301035"
+	"564615759615882010733764341109834449576907982406265803484111"
+	"303615971297609065271517286111839839646343815364461776394273"
+	"571391219315553915335300622295196577640884201524657614065743"
+	"729121754460652975075990012786021662416077757235487562550381"
+	"116824006014440438178253273174734436163638119532295383351135"
+	"543170811596051785036366846773285937845231974424475418970517"
+	"659179798069972876889488877627309887323737590814875050457317"
+	"809625163713227973229002908003491739085115971899606986738405"
+	"752463436186745107821032315480693516006251388789902053863235"
+	"071957895722121876262598833823352290042576488238120724072267"
+	"480348425637199003147760378463243043407534395221882144887315"
+	"875876025907739792297575795373506429192468470170038312050500"
+	"917665707583420927303790875332407805094505665159755210495266"
+	"485594187244922216154283213688032393939401426499517609275128"
+	"062067355172333120857796045387692492375534056470145301671359"
+	"016602832469675123108598588424022216759334733452626330303791"
+	"660952659036162827509451468771297954737165701921676834866994"
+	"084496268491510599580714458155026746676860790028899722645883"
+	"679435969902046442373108472951515492761911884847211825930115"
+	"654927539118088350255959445076757398298893380662248358210075"
+	"297702191186519614515280395341723177201383862827129721649638"
+	"274531314762377778754560119397123180107310216608157141828379"
+	"259328274508467371717057031104537750450228447941619684073375"
+	"630517322006118640290925241602376256334414376495602911265450"
+	"165889418372161719063670619610214632774542741157366426747861"
+	"054811449449004970132668146607323502760146957586465275981090"
+	"328336256381187450646030492071694516054712444513961269623339"
+	"705411366337817643269316717217432478812002049894979925260411"
+	"553651385384826214231392012841425936827944383266227115236029"
+	"717393064659821056467446870597828757433936024422511537561864"
+	"619865595955628070343780472634463916608440151554502790128417"
+	"277259492437005696576453717387309605129939526661181496994297"
+	"244693710437436581443653555343763817246961834486181294985455"
+	"884981266421533438177271809310897035958260776218253097858601"
+	"160643120653927024652834025146166356877731266566437231429061"
+	"099807825113272551869352908241073955695854354852545370793609"
+	"838167127357752579007490955536081388103461735071174567636929"
+	"060824172375010035497010614957197713919909924635906503348016"
+	"450952475530978921242656498701313530533991692867619886826204"
+	"706468476070943378163577235406861262755114909606255628375659"
+	"196050370661430148107216310635729360112021571291096278032076"
+	"401092225373270173950575377792566872113768085940991929655824"
+	"050914085013970861399015141010432835406337266746706727481946"
+	"196898882472095111505210339933002505227334750020285673634670"
+	"738458390159933494226851499935336922036551687169140582574153"
+	"726872453800858360764892975201757027862632615130256075468549"
+	"502839367841926212872731925042838691319757663382746471782087"
+	"828988857978192483595747889021081459460627705275735868618724"
+	"958783348362295106875556443770626864591972089881215465141073"
+	"516646930158996569747675806719463602045230325049794904894739"
+	"988312727573320971310488326486213061839843830003145873279435"
+	"454121817918269218294901387830156432148142381592864575229119"
+	"479029130050663564889172093067341444164942736885872753984012"
+	"865743421266470861425283889134636885790293235727017788606167"
+	"560012477186697069994213912998550931078617189790771376702549"
+	"055361745205232419031423044366971378594392952093464046441667"
+	"117613906203494872209149396518971207279263883566606774353236"
+	"255473603377861613942239543893894460581170658088042083661404"
+	"937465706659424639301296621963906278930754459296017486063079"
+	"582024995485338893699574289806529424673393810217577605952909"
+	"491283123179789154639057105774960699934999681018155749261864"
+	"012821574480758746632022143860041252142846691648490809250856"
+	"327057133540568617791625295314357533564192304930155735301757"
+	"457531580062662693966772497728335047637869054460240023262262"
+	"260698443946964564691259441706490611176164305693669515767804"
+	"836460521205954731752583848846525153811934541997962775215961"
+	"180346397456122329133421016560406277159258781706172834569862"
+	"946953007793254152187010227976038449980797987728559041018441"
+	"590564594738308310579014597893182017151615208050090318483536"
+	"106249131918576316944251537092347119867433735046169725181104"
+	"507590928834713669184230634083190791725243913641206256399101"
+	"550966117564795555149420011152858441084271411289366093158722"
+	"254752761637144762690747726313899449121995142565661043193165"
+	"353010677613760383307839362361625628371456344409245507081913"
+	"518237257141164239966660785903970075181826808229440731778746"
+	"830751045427285945936163931997929399708401851740705527023711"
+	"492262489476846435969872480702228386506357017948329114555484"
+	"164760105906717855684788039081591713778852802032849601308169"
+	"832017420608399347713424218434541771868442189843417628618330"
+	"607429739733739437863581804003482214082370567967330530446020"
+	"897773385726872912189813323094415093143437550397556262780011"
+	"208941731420098754319961419532567861629590267320403217607660"
+	"774125374101195389953895035347940170148097810952083736798564"
+	"420421622607993390894450932047257403433908665884124601384175"
+	"012387617430467934818665777122459487877479257747635172691688"
+	"471574765285820096075133353869554987216398800026453207557923"
+	"535966131756358352198875705382763163680830588056974671628368"
+	"719411827591592806044707764658145625683998557872894583705117"
+	"936257144994734815912058252772021032081682437093280526665192"
+	"728869800954748014250481042845426151143544474372887617562791"
+	"409866964806319608280819816846942058817381943129762034507591"
+	"367065185343216917751414811188645979508942996964383255432999"
+	"246119971295726296202396921903289017490293595312645036697141"
+	"581149988784499288560584613793415358537364677872496224892098"
+	"940856692342358755626519304557946447004033186014602147449599"
+	"351317079758304444877174136521487256811625263467410007624215"
+	"856145392339552689565690577293133060124853654497575571509576"
+	"408069646196646757505249296126372820539234090564691695806544"
+	"715766025588258581902342311480969412221466852421842650484494"
+	"063894865891424563992751226230317059592413191308470146226366"
+	"458233536657973376067140793776369412191789801225320255079444"
+	"592709005698858098716107025188986428347407279053266600044521"
+	"079987989879536957560131070100060050673537683871138182387904"
+	"590837539252425985326631955455857258818756188063697492342550"
+	"045277400125480079927908846850898283905756532829762950509886"
+	"991675925213188409911532242068610889478326451513981115020992"
+	"630395715520350039372702741107911736947893709538471200363740"
+	"669304116845653259038102180504837110789645359520309929381266"
+	"271463740502507456882882255788069710715770802338317704510793"
+	"279398576163709512326095306022330346997717688118726634628650"
+	"675984237916551201500684504118483305560295744746257951860545"
+	"390826531622290588364837980034428055971370065573420370270905"
+	"592141420051502465016793525150950140243606137664910359769114"
+	"512792293426708006440346732679574519594848136194781488696994"
+	"267355775509666977187349644291823026624985531726865131782364"
+	"428380093055155988532106121916567178604128111080322761213573"
+	"781334480667563871257352254033032675246444238637990062075058"
+	"819854494711379915549313390179300091783493496822950479766923"
+	"983305064901026858870340863556799948310622536592472509634484"
+	"910640735459644047154918467543140024764605449756679450446473"
+	"048922824617117723876384637412932380635306714345354710568410"
+	"140587435077620501285599837051978855056335305570615129711860"
+	"309387503970812843734718712815925040263182888714533431137355"
+	"255722368962836390856001176889513153529416105504464217522618"
+	"741534232432067776306691118141998014985541610448993152948945"
+	"865983354717289054861249734477980864059509622993770525110616"
+	"313865830823478927462500895844216364365499438449134659145333"
+	"799994034010282254566331595018205841080487728993632798168070"
+	"476921205941768965021887178681810499301253039335978279707627"
+	"295287697256489961179958946847840431902105306618594831078534"
+	"622089641993900896756734276531931450266972752637997248151974"
+	"2277811246822238899767398834228515626e-4951",
+	false,
+	0x0p+0,
+	0x0p+0,
+	0x0p+0,
+	0x8p-152,
+	false,
+	0x0p+0,
+	0x0p+0,
+	0x0p+0,
+	0x4p-1076,
+	false,
+	0x0p+0,
+	0x8p-16448,
+	0x0p+0,
+	0x8p-16448,
+	false,
+	0x4p-16448,
+	0x4p-16448,
+	0x4p-16448,
+	0x8p-16448,
+	false,
+	0x0p+0,
+	0x0p+0,
+	0x0p+0,
+	0x4p-1076,
+	false,
+	0x4p-16448,
+	0x4p-16448,
+	0x4p-16448,
+	0x4.000000000004p-16448),
+  TEST ("-1.822599765941237301264202966809709908199525407846781671860"
+	"490243514185844316698868404780354312913602598623673673601765"
+	"550983492816311016084986754037794904502741911290588965839284"
+	"612631902816779878310781282991705364470159896776763634295620"
+	"399977086405507759269191523027384357711224647652929859134107"
+	"131311033766177730422034039629876869844113169485951406677332"
+	"105978646906000108381336146016138716819515422802764897759427"
+	"649606127660585581743814569231465017756926375080156642289293"
+	"673283429041674526561852596994351991654293919973161250734301"
+	"229733188293435228211817355121198597329430178784033567238991"
+	"382109868146408875647780268422880633923323954258731625461868"
+	"019756361390707976683048199722201701058526744224010988881802"
+	"218954343811624517058454647275266141777302127508235524255495"
+	"077624847410188087536387260798962414632082336414689612417189"
+	"261074423762230826670226570449267469450539999733042497896470"
+	"433541112583949046313166142066816768615182855303336355508050"
+	"848493454272763408046723392787911772643228335232454643531531"
+	"293780965109596419787343039866200370966335396293292123951626"
+	"300857251255826009366852778238834928201530835930494150511044"
+	"504376202119146906060707879263589773640814116355442997229287"
+	"357516926438797713012400395859990977672075958299501751914411"
+	"100177832983979385545468844204615525381872441047228160242136"
+	"358061399074918180830294797604541788443627116266477614874946"
+	"320275381479719120639248096909691038772952730586273980670234"
+	"908845582838047130660362863656303741468826570210809843051529"
+	"764599710715968724783049668698031537609151121922737670838986"
+	"231019063313451704083543258772693191077504478032977705196457"
+	"476311963940423579766592267743333240240281703765714192664650"
+	"261238842108525475632373727317877433107392470771157555519315"
+	"342195712606219652095292061187111486142303268742526232324327"
+	"684859549513380259143780498498605389236533490064713713719758"
+	"516195482395683839110874815487709856719069581339439277999588"
+	"764225441374023269294088723635153369117449251488451426500682"
+	"275202613643546970029162894292728684327495978132931525041736"
+	"043811533010451689459744960487595414710801005191019738886041"
+	"700330759577486347718291152510955454288346024086767479447085"
+	"488381542403918701406924613770471036657700557631167438407981"
+	"043720651128279219456250303615102891006541837056511748806222"
+	"607397585491924343994174101644720628454377782608040907575602"
+	"819446556281207664542228467047573092234645450583055317437795"
+	"082417803470814703744887189896369902337382121741956042345935"
+	"884612723253142155282654595436238643127962691764272518180275"
+	"427113459785623180566612952410150958294158542188856129683947"
+	"423205647411293537917743492822755414940264289391349206278124"
+	"637261117530546227171193101163560203913770166957306596094587"
+	"157942068344009717983136831735215720221516068205887802515300"
+	"718418531986345165208737593665100455983750248380809061307398"
+	"226468562035199351945434457763525745232868372698882470547439"
+	"739824719081288307173474326042654012348179128378292897284246"
+	"659521026941421904090179393555387209037739400593259788708135"
+	"948191584917854112818292327284321851309301216774469081860366"
+	"386269172727256532505770337882755328485250206768602685033962"
+	"440104608681703661836684224002452204206988870853482747123520"
+	"399893225930911094236785628778409716642043743011838124733934"
+	"741815690236928243119773507801659161306391826034349899269700"
+	"203318655841365557670338920830120355215775570185205187792786"
+	"469651542036921770351060275981525257479972870679584955838287"
+	"739201639690056010173674146269075399160226397421213763250898"
+	"426455931554089138319236160118935041431135881698097569756856"
+	"151568097183010770415265728455292024186273012588882570230103"
+	"556461575961588201073376434110983444957690798240626580348411"
+	"130361597129760906527151728611183983964634381536446177639427"
+	"357139121931555391533530062229519657764088420152465761406574"
+	"372912175446065297507599001278602166241607775723548756255038"
+	"111682400601444043817825327317473443616363811953229538335113"
+	"554317081159605178503636684677328593784523197442447541897051"
+	"765917979806997287688948887762730988732373759081487505045731"
+	"780962516371322797322900290800349173908511597189960698673840"
+	"575246343618674510782103231548069351600625138878990205386323"
+	"507195789572212187626259883382335229004257648823812072407226"
+	"748034842563719900314776037846324304340753439522188214488731"
+	"587587602590773979229757579537350642919246847017003831205050"
+	"091766570758342092730379087533240780509450566515975521049526"
+	"648559418724492221615428321368803239393940142649951760927512"
+	"806206735517233312085779604538769249237553405647014530167135"
+	"901660283246967512310859858842402221675933473345262633030379"
+	"166095265903616282750945146877129795473716570192167683486699"
+	"408449626849151059958071445815502674667686079002889972264588"
+	"367943596990204644237310847295151549276191188484721182593011"
+	"565492753911808835025595944507675739829889338066224835821007"
+	"529770219118651961451528039534172317720138386282712972164963"
+	"827453131476237777875456011939712318010731021660815714182837"
+	"925932827450846737171705703110453775045022844794161968407337"
+	"563051732200611864029092524160237625633441437649560291126545"
+	"016588941837216171906367061961021463277454274115736642674786"
+	"105481144944900497013266814660732350276014695758646527598109"
+	"032833625638118745064603049207169451605471244451396126962333"
+	"970541136633781764326931671721743247881200204989497992526041"
+	"155365138538482621423139201284142593682794438326622711523602"
+	"971739306465982105646744687059782875743393602442251153756186"
+	"461986559595562807034378047263446391660844015155450279012841"
+	"727725949243700569657645371738730960512993952666118149699429"
+	"724469371043743658144365355534376381724696183448618129498545"
+	"588498126642153343817727180931089703595826077621825309785860"
+	"116064312065392702465283402514616635687773126656643723142906"
+	"109980782511327255186935290824107395569585435485254537079360"
+	"983816712735775257900749095553608138810346173507117456763692"
+	"906082417237501003549701061495719771391990992463590650334801"
+	"645095247553097892124265649870131353053399169286761988682620"
+	"470646847607094337816357723540686126275511490960625562837565"
+	"919605037066143014810721631063572936011202157129109627803207"
+	"640109222537327017395057537779256687211376808594099192965582"
+	"405091408501397086139901514101043283540633726674670672748194"
+	"619689888247209511150521033993300250522733475002028567363467"
+	"073845839015993349422685149993533692203655168716914058257415"
+	"372687245380085836076489297520175702786263261513025607546854"
+	"950283936784192621287273192504283869131975766338274647178208"
+	"782898885797819248359574788902108145946062770527573586861872"
+	"495878334836229510687555644377062686459197208988121546514107"
+	"351664693015899656974767580671946360204523032504979490489473"
+	"998831272757332097131048832648621306183984383000314587327943"
+	"545412181791826921829490138783015643214814238159286457522911"
+	"947902913005066356488917209306734144416494273688587275398401"
+	"286574342126647086142528388913463688579029323572701778860616"
+	"756001247718669706999421391299855093107861718979077137670254"
+	"905536174520523241903142304436697137859439295209346404644166"
+	"711761390620349487220914939651897120727926388356660677435323"
+	"625547360337786161394223954389389446058117065808804208366140"
+	"493746570665942463930129662196390627893075445929601748606307"
+	"958202499548533889369957428980652942467339381021757760595290"
+	"949128312317978915463905710577496069993499968101815574926186"
+	"401282157448075874663202214386004125214284669164849080925085"
+	"632705713354056861779162529531435753356419230493015573530175"
+	"745753158006266269396677249772833504763786905446024002326226"
+	"226069844394696456469125944170649061117616430569366951576780"
+	"483646052120595473175258384884652515381193454199796277521596"
+	"118034639745612232913342101656040627715925878170617283456986"
+	"294695300779325415218701022797603844998079798772855904101844"
+	"159056459473830831057901459789318201715161520805009031848353"
+	"610624913191857631694425153709234711986743373504616972518110"
+	"450759092883471366918423063408319079172524391364120625639910"
+	"155096611756479555514942001115285844108427141128936609315872"
+	"225475276163714476269074772631389944912199514256566104319316"
+	"535301067761376038330783936236162562837145634440924550708191"
+	"351823725714116423996666078590397007518182680822944073177874"
+	"683075104542728594593616393199792939970840185174070552702371"
+	"149226248947684643596987248070222838650635701794832911455548"
+	"416476010590671785568478803908159171377885280203284960130816"
+	"983201742060839934771342421843454177186844218984341762861833"
+	"060742973973373943786358180400348221408237056796733053044602"
+	"089777338572687291218981332309441509314343755039755626278001"
+	"120894173142009875431996141953256786162959026732040321760766"
+	"077412537410119538995389503534794017014809781095208373679856"
+	"442042162260799339089445093204725740343390866588412460138417"
+	"501238761743046793481866577712245948787747925774763517269168"
+	"847157476528582009607513335386955498721639880002645320755792"
+	"353596613175635835219887570538276316368083058805697467162836"
+	"871941182759159280604470776465814562568399855787289458370511"
+	"793625714499473481591205825277202103208168243709328052666519"
+	"272886980095474801425048104284542615114354447437288761756279"
+	"140986696480631960828081981684694205881738194312976203450759"
+	"136706518534321691775141481118864597950894299696438325543299"
+	"924611997129572629620239692190328901749029359531264503669714"
+	"158114998878449928856058461379341535853736467787249622489209"
+	"894085669234235875562651930455794644700403318601460214744959"
+	"935131707975830444487717413652148725681162526346741000762421"
+	"585614539233955268956569057729313306012485365449757557150957"
+	"640806964619664675750524929612637282053923409056469169580654"
+	"471576602558825858190234231148096941222146685242184265048449"
+	"406389486589142456399275122623031705959241319130847014622636"
+	"645823353665797337606714079377636941219178980122532025507944"
+	"459270900569885809871610702518898642834740727905326660004452"
+	"107998798987953695756013107010006005067353768387113818238790"
+	"459083753925242598532663195545585725881875618806369749234255"
+	"004527740012548007992790884685089828390575653282976295050988"
+	"699167592521318840991153224206861088947832645151398111502099"
+	"263039571552035003937270274110791173694789370953847120036374"
+	"066930411684565325903810218050483711078964535952030992938126"
+	"627146374050250745688288225578806971071577080233831770451079"
+	"327939857616370951232609530602233034699771768811872663462865"
+	"067598423791655120150068450411848330556029574474625795186054"
+	"539082653162229058836483798003442805597137006557342037027090"
+	"559214142005150246501679352515095014024360613766491035976911"
+	"451279229342670800644034673267957451959484813619478148869699"
+	"426735577550966697718734964429182302662498553172686513178236"
+	"442838009305515598853210612191656717860412811108032276121357"
+	"378133448066756387125735225403303267524644423863799006207505"
+	"881985449471137991554931339017930009178349349682295047976692"
+	"398330506490102685887034086355679994831062253659247250963448"
+	"491064073545964404715491846754314002476460544975667945044647"
+	"304892282461711772387638463741293238063530671434535471056841"
+	"014058743507762050128559983705197885505633530557061512971186"
+	"030938750397081284373471871281592504026318288871453343113735"
+	"525572236896283639085600117688951315352941610550446421752261"
+	"874153423243206777630669111814199801498554161044899315294894"
+	"586598335471728905486124973447798086405950962299377052511061"
+	"631386583082347892746250089584421636436549943844913465914533"
+	"379999403401028225456633159501820584108048772899363279816807"
+	"047692120594176896502188717868181049930125303933597827970762"
+	"729528769725648996117995894684784043190210530661859483107853"
+	"462208964199390089675673427653193145026697275263799724815197"
+	"42277811246822238899767398834228515624e-4951",
+	false,
+	-0x8p-152,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0,
+	false,
+	-0x4p-1076,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0,
+	false,
+	-0x8p-16448,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0,
+	false,
+	-0x4p-16448,
+	-0x4p-16448,
+	-0x0p+0,
+	-0x0p+0,
+	false,
+	-0x4p-1076,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0,
+	false,
+	-0x4p-16448,
+	-0x4p-16448,
+	-0x3.fffffffffffcp-16448,
+	-0x3.fffffffffffcp-16448),
+  TEST ("-1.822599765941237301264202966809709908199525407846781671860"
+	"490243514185844316698868404780354312913602598623673673601765"
+	"550983492816311016084986754037794904502741911290588965839284"
+	"612631902816779878310781282991705364470159896776763634295620"
+	"399977086405507759269191523027384357711224647652929859134107"
+	"131311033766177730422034039629876869844113169485951406677332"
+	"105978646906000108381336146016138716819515422802764897759427"
+	"649606127660585581743814569231465017756926375080156642289293"
+	"673283429041674526561852596994351991654293919973161250734301"
+	"229733188293435228211817355121198597329430178784033567238991"
+	"382109868146408875647780268422880633923323954258731625461868"
+	"019756361390707976683048199722201701058526744224010988881802"
+	"218954343811624517058454647275266141777302127508235524255495"
+	"077624847410188087536387260798962414632082336414689612417189"
+	"261074423762230826670226570449267469450539999733042497896470"
+	"433541112583949046313166142066816768615182855303336355508050"
+	"848493454272763408046723392787911772643228335232454643531531"
+	"293780965109596419787343039866200370966335396293292123951626"
+	"300857251255826009366852778238834928201530835930494150511044"
+	"504376202119146906060707879263589773640814116355442997229287"
+	"357516926438797713012400395859990977672075958299501751914411"
+	"100177832983979385545468844204615525381872441047228160242136"
+	"358061399074918180830294797604541788443627116266477614874946"
+	"320275381479719120639248096909691038772952730586273980670234"
+	"908845582838047130660362863656303741468826570210809843051529"
+	"764599710715968724783049668698031537609151121922737670838986"
+	"231019063313451704083543258772693191077504478032977705196457"
+	"476311963940423579766592267743333240240281703765714192664650"
+	"261238842108525475632373727317877433107392470771157555519315"
+	"342195712606219652095292061187111486142303268742526232324327"
+	"684859549513380259143780498498605389236533490064713713719758"
+	"516195482395683839110874815487709856719069581339439277999588"
+	"764225441374023269294088723635153369117449251488451426500682"
+	"275202613643546970029162894292728684327495978132931525041736"
+	"043811533010451689459744960487595414710801005191019738886041"
+	"700330759577486347718291152510955454288346024086767479447085"
+	"488381542403918701406924613770471036657700557631167438407981"
+	"043720651128279219456250303615102891006541837056511748806222"
+	"607397585491924343994174101644720628454377782608040907575602"
+	"819446556281207664542228467047573092234645450583055317437795"
+	"082417803470814703744887189896369902337382121741956042345935"
+	"884612723253142155282654595436238643127962691764272518180275"
+	"427113459785623180566612952410150958294158542188856129683947"
+	"423205647411293537917743492822755414940264289391349206278124"
+	"637261117530546227171193101163560203913770166957306596094587"
+	"157942068344009717983136831735215720221516068205887802515300"
+	"718418531986345165208737593665100455983750248380809061307398"
+	"226468562035199351945434457763525745232868372698882470547439"
+	"739824719081288307173474326042654012348179128378292897284246"
+	"659521026941421904090179393555387209037739400593259788708135"
+	"948191584917854112818292327284321851309301216774469081860366"
+	"386269172727256532505770337882755328485250206768602685033962"
+	"440104608681703661836684224002452204206988870853482747123520"
+	"399893225930911094236785628778409716642043743011838124733934"
+	"741815690236928243119773507801659161306391826034349899269700"
+	"203318655841365557670338920830120355215775570185205187792786"
+	"469651542036921770351060275981525257479972870679584955838287"
+	"739201639690056010173674146269075399160226397421213763250898"
+	"426455931554089138319236160118935041431135881698097569756856"
+	"151568097183010770415265728455292024186273012588882570230103"
+	"556461575961588201073376434110983444957690798240626580348411"
+	"130361597129760906527151728611183983964634381536446177639427"
+	"357139121931555391533530062229519657764088420152465761406574"
+	"372912175446065297507599001278602166241607775723548756255038"
+	"111682400601444043817825327317473443616363811953229538335113"
+	"554317081159605178503636684677328593784523197442447541897051"
+	"765917979806997287688948887762730988732373759081487505045731"
+	"780962516371322797322900290800349173908511597189960698673840"
+	"575246343618674510782103231548069351600625138878990205386323"
+	"507195789572212187626259883382335229004257648823812072407226"
+	"748034842563719900314776037846324304340753439522188214488731"
+	"587587602590773979229757579537350642919246847017003831205050"
+	"091766570758342092730379087533240780509450566515975521049526"
+	"648559418724492221615428321368803239393940142649951760927512"
+	"806206735517233312085779604538769249237553405647014530167135"
+	"901660283246967512310859858842402221675933473345262633030379"
+	"166095265903616282750945146877129795473716570192167683486699"
+	"408449626849151059958071445815502674667686079002889972264588"
+	"367943596990204644237310847295151549276191188484721182593011"
+	"565492753911808835025595944507675739829889338066224835821007"
+	"529770219118651961451528039534172317720138386282712972164963"
+	"827453131476237777875456011939712318010731021660815714182837"
+	"925932827450846737171705703110453775045022844794161968407337"
+	"563051732200611864029092524160237625633441437649560291126545"
+	"016588941837216171906367061961021463277454274115736642674786"
+	"105481144944900497013266814660732350276014695758646527598109"
+	"032833625638118745064603049207169451605471244451396126962333"
+	"970541136633781764326931671721743247881200204989497992526041"
+	"155365138538482621423139201284142593682794438326622711523602"
+	"971739306465982105646744687059782875743393602442251153756186"
+	"461986559595562807034378047263446391660844015155450279012841"
+	"727725949243700569657645371738730960512993952666118149699429"
+	"724469371043743658144365355534376381724696183448618129498545"
+	"588498126642153343817727180931089703595826077621825309785860"
+	"116064312065392702465283402514616635687773126656643723142906"
+	"109980782511327255186935290824107395569585435485254537079360"
+	"983816712735775257900749095553608138810346173507117456763692"
+	"906082417237501003549701061495719771391990992463590650334801"
+	"645095247553097892124265649870131353053399169286761988682620"
+	"470646847607094337816357723540686126275511490960625562837565"
+	"919605037066143014810721631063572936011202157129109627803207"
+	"640109222537327017395057537779256687211376808594099192965582"
+	"405091408501397086139901514101043283540633726674670672748194"
+	"619689888247209511150521033993300250522733475002028567363467"
+	"073845839015993349422685149993533692203655168716914058257415"
+	"372687245380085836076489297520175702786263261513025607546854"
+	"950283936784192621287273192504283869131975766338274647178208"
+	"782898885797819248359574788902108145946062770527573586861872"
+	"495878334836229510687555644377062686459197208988121546514107"
+	"351664693015899656974767580671946360204523032504979490489473"
+	"998831272757332097131048832648621306183984383000314587327943"
+	"545412181791826921829490138783015643214814238159286457522911"
+	"947902913005066356488917209306734144416494273688587275398401"
+	"286574342126647086142528388913463688579029323572701778860616"
+	"756001247718669706999421391299855093107861718979077137670254"
+	"905536174520523241903142304436697137859439295209346404644166"
+	"711761390620349487220914939651897120727926388356660677435323"
+	"625547360337786161394223954389389446058117065808804208366140"
+	"493746570665942463930129662196390627893075445929601748606307"
+	"958202499548533889369957428980652942467339381021757760595290"
+	"949128312317978915463905710577496069993499968101815574926186"
+	"401282157448075874663202214386004125214284669164849080925085"
+	"632705713354056861779162529531435753356419230493015573530175"
+	"745753158006266269396677249772833504763786905446024002326226"
+	"226069844394696456469125944170649061117616430569366951576780"
+	"483646052120595473175258384884652515381193454199796277521596"
+	"118034639745612232913342101656040627715925878170617283456986"
+	"294695300779325415218701022797603844998079798772855904101844"
+	"159056459473830831057901459789318201715161520805009031848353"
+	"610624913191857631694425153709234711986743373504616972518110"
+	"450759092883471366918423063408319079172524391364120625639910"
+	"155096611756479555514942001115285844108427141128936609315872"
+	"225475276163714476269074772631389944912199514256566104319316"
+	"535301067761376038330783936236162562837145634440924550708191"
+	"351823725714116423996666078590397007518182680822944073177874"
+	"683075104542728594593616393199792939970840185174070552702371"
+	"149226248947684643596987248070222838650635701794832911455548"
+	"416476010590671785568478803908159171377885280203284960130816"
+	"983201742060839934771342421843454177186844218984341762861833"
+	"060742973973373943786358180400348221408237056796733053044602"
+	"089777338572687291218981332309441509314343755039755626278001"
+	"120894173142009875431996141953256786162959026732040321760766"
+	"077412537410119538995389503534794017014809781095208373679856"
+	"442042162260799339089445093204725740343390866588412460138417"
+	"501238761743046793481866577712245948787747925774763517269168"
+	"847157476528582009607513335386955498721639880002645320755792"
+	"353596613175635835219887570538276316368083058805697467162836"
+	"871941182759159280604470776465814562568399855787289458370511"
+	"793625714499473481591205825277202103208168243709328052666519"
+	"272886980095474801425048104284542615114354447437288761756279"
+	"140986696480631960828081981684694205881738194312976203450759"
+	"136706518534321691775141481118864597950894299696438325543299"
+	"924611997129572629620239692190328901749029359531264503669714"
+	"158114998878449928856058461379341535853736467787249622489209"
+	"894085669234235875562651930455794644700403318601460214744959"
+	"935131707975830444487717413652148725681162526346741000762421"
+	"585614539233955268956569057729313306012485365449757557150957"
+	"640806964619664675750524929612637282053923409056469169580654"
+	"471576602558825858190234231148096941222146685242184265048449"
+	"406389486589142456399275122623031705959241319130847014622636"
+	"645823353665797337606714079377636941219178980122532025507944"
+	"459270900569885809871610702518898642834740727905326660004452"
+	"107998798987953695756013107010006005067353768387113818238790"
+	"459083753925242598532663195545585725881875618806369749234255"
+	"004527740012548007992790884685089828390575653282976295050988"
+	"699167592521318840991153224206861088947832645151398111502099"
+	"263039571552035003937270274110791173694789370953847120036374"
+	"066930411684565325903810218050483711078964535952030992938126"
+	"627146374050250745688288225578806971071577080233831770451079"
+	"327939857616370951232609530602233034699771768811872663462865"
+	"067598423791655120150068450411848330556029574474625795186054"
+	"539082653162229058836483798003442805597137006557342037027090"
+	"559214142005150246501679352515095014024360613766491035976911"
+	"451279229342670800644034673267957451959484813619478148869699"
+	"426735577550966697718734964429182302662498553172686513178236"
+	"442838009305515598853210612191656717860412811108032276121357"
+	"378133448066756387125735225403303267524644423863799006207505"
+	"881985449471137991554931339017930009178349349682295047976692"
+	"398330506490102685887034086355679994831062253659247250963448"
+	"491064073545964404715491846754314002476460544975667945044647"
+	"304892282461711772387638463741293238063530671434535471056841"
+	"014058743507762050128559983705197885505633530557061512971186"
+	"030938750397081284373471871281592504026318288871453343113735"
+	"525572236896283639085600117688951315352941610550446421752261"
+	"874153423243206777630669111814199801498554161044899315294894"
+	"586598335471728905486124973447798086405950962299377052511061"
+	"631386583082347892746250089584421636436549943844913465914533"
+	"379999403401028225456633159501820584108048772899363279816807"
+	"047692120594176896502188717868181049930125303933597827970762"
+	"729528769725648996117995894684784043190210530661859483107853"
+	"462208964199390089675673427653193145026697275263799724815197"
+	"42277811246822238899767398834228515625e-4951",
+	false,
+	-0x8p-152,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0,
+	false,
+	-0x4p-1076,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0,
+	false,
+	-0x8p-16448,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0,
+	true,
+	-0x4p-16448,
+	-0x4p-16448,
+	-0x4p-16448,
+	-0x4p-16448,
+	false,
+	-0x4p-1076,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0,
+	true,
+	-0x4p-16448,
+	-0x4p-16448,
+	-0x4p-16448,
+	-0x4p-16448),
+  TEST ("-1.822599765941237301264202966809709908199525407846781671860"
+	"490243514185844316698868404780354312913602598623673673601765"
+	"550983492816311016084986754037794904502741911290588965839284"
+	"612631902816779878310781282991705364470159896776763634295620"
+	"399977086405507759269191523027384357711224647652929859134107"
+	"131311033766177730422034039629876869844113169485951406677332"
+	"105978646906000108381336146016138716819515422802764897759427"
+	"649606127660585581743814569231465017756926375080156642289293"
+	"673283429041674526561852596994351991654293919973161250734301"
+	"229733188293435228211817355121198597329430178784033567238991"
+	"382109868146408875647780268422880633923323954258731625461868"
+	"019756361390707976683048199722201701058526744224010988881802"
+	"218954343811624517058454647275266141777302127508235524255495"
+	"077624847410188087536387260798962414632082336414689612417189"
+	"261074423762230826670226570449267469450539999733042497896470"
+	"433541112583949046313166142066816768615182855303336355508050"
+	"848493454272763408046723392787911772643228335232454643531531"
+	"293780965109596419787343039866200370966335396293292123951626"
+	"300857251255826009366852778238834928201530835930494150511044"
+	"504376202119146906060707879263589773640814116355442997229287"
+	"357516926438797713012400395859990977672075958299501751914411"
+	"100177832983979385545468844204615525381872441047228160242136"
+	"358061399074918180830294797604541788443627116266477614874946"
+	"320275381479719120639248096909691038772952730586273980670234"
+	"908845582838047130660362863656303741468826570210809843051529"
+	"764599710715968724783049668698031537609151121922737670838986"
+	"231019063313451704083543258772693191077504478032977705196457"
+	"476311963940423579766592267743333240240281703765714192664650"
+	"261238842108525475632373727317877433107392470771157555519315"
+	"342195712606219652095292061187111486142303268742526232324327"
+	"684859549513380259143780498498605389236533490064713713719758"
+	"516195482395683839110874815487709856719069581339439277999588"
+	"764225441374023269294088723635153369117449251488451426500682"
+	"275202613643546970029162894292728684327495978132931525041736"
+	"043811533010451689459744960487595414710801005191019738886041"
+	"700330759577486347718291152510955454288346024086767479447085"
+	"488381542403918701406924613770471036657700557631167438407981"
+	"043720651128279219456250303615102891006541837056511748806222"
+	"607397585491924343994174101644720628454377782608040907575602"
+	"819446556281207664542228467047573092234645450583055317437795"
+	"082417803470814703744887189896369902337382121741956042345935"
+	"884612723253142155282654595436238643127962691764272518180275"
+	"427113459785623180566612952410150958294158542188856129683947"
+	"423205647411293537917743492822755414940264289391349206278124"
+	"637261117530546227171193101163560203913770166957306596094587"
+	"157942068344009717983136831735215720221516068205887802515300"
+	"718418531986345165208737593665100455983750248380809061307398"
+	"226468562035199351945434457763525745232868372698882470547439"
+	"739824719081288307173474326042654012348179128378292897284246"
+	"659521026941421904090179393555387209037739400593259788708135"
+	"948191584917854112818292327284321851309301216774469081860366"
+	"386269172727256532505770337882755328485250206768602685033962"
+	"440104608681703661836684224002452204206988870853482747123520"
+	"399893225930911094236785628778409716642043743011838124733934"
+	"741815690236928243119773507801659161306391826034349899269700"
+	"203318655841365557670338920830120355215775570185205187792786"
+	"469651542036921770351060275981525257479972870679584955838287"
+	"739201639690056010173674146269075399160226397421213763250898"
+	"426455931554089138319236160118935041431135881698097569756856"
+	"151568097183010770415265728455292024186273012588882570230103"
+	"556461575961588201073376434110983444957690798240626580348411"
+	"130361597129760906527151728611183983964634381536446177639427"
+	"357139121931555391533530062229519657764088420152465761406574"
+	"372912175446065297507599001278602166241607775723548756255038"
+	"111682400601444043817825327317473443616363811953229538335113"
+	"554317081159605178503636684677328593784523197442447541897051"
+	"765917979806997287688948887762730988732373759081487505045731"
+	"780962516371322797322900290800349173908511597189960698673840"
+	"575246343618674510782103231548069351600625138878990205386323"
+	"507195789572212187626259883382335229004257648823812072407226"
+	"748034842563719900314776037846324304340753439522188214488731"
+	"587587602590773979229757579537350642919246847017003831205050"
+	"091766570758342092730379087533240780509450566515975521049526"
+	"648559418724492221615428321368803239393940142649951760927512"
+	"806206735517233312085779604538769249237553405647014530167135"
+	"901660283246967512310859858842402221675933473345262633030379"
+	"166095265903616282750945146877129795473716570192167683486699"
+	"408449626849151059958071445815502674667686079002889972264588"
+	"367943596990204644237310847295151549276191188484721182593011"
+	"565492753911808835025595944507675739829889338066224835821007"
+	"529770219118651961451528039534172317720138386282712972164963"
+	"827453131476237777875456011939712318010731021660815714182837"
+	"925932827450846737171705703110453775045022844794161968407337"
+	"563051732200611864029092524160237625633441437649560291126545"
+	"016588941837216171906367061961021463277454274115736642674786"
+	"105481144944900497013266814660732350276014695758646527598109"
+	"032833625638118745064603049207169451605471244451396126962333"
+	"970541136633781764326931671721743247881200204989497992526041"
+	"155365138538482621423139201284142593682794438326622711523602"
+	"971739306465982105646744687059782875743393602442251153756186"
+	"461986559595562807034378047263446391660844015155450279012841"
+	"727725949243700569657645371738730960512993952666118149699429"
+	"724469371043743658144365355534376381724696183448618129498545"
+	"588498126642153343817727180931089703595826077621825309785860"
+	"116064312065392702465283402514616635687773126656643723142906"
+	"109980782511327255186935290824107395569585435485254537079360"
+	"983816712735775257900749095553608138810346173507117456763692"
+	"906082417237501003549701061495719771391990992463590650334801"
+	"645095247553097892124265649870131353053399169286761988682620"
+	"470646847607094337816357723540686126275511490960625562837565"
+	"919605037066143014810721631063572936011202157129109627803207"
+	"640109222537327017395057537779256687211376808594099192965582"
+	"405091408501397086139901514101043283540633726674670672748194"
+	"619689888247209511150521033993300250522733475002028567363467"
+	"073845839015993349422685149993533692203655168716914058257415"
+	"372687245380085836076489297520175702786263261513025607546854"
+	"950283936784192621287273192504283869131975766338274647178208"
+	"782898885797819248359574788902108145946062770527573586861872"
+	"495878334836229510687555644377062686459197208988121546514107"
+	"351664693015899656974767580671946360204523032504979490489473"
+	"998831272757332097131048832648621306183984383000314587327943"
+	"545412181791826921829490138783015643214814238159286457522911"
+	"947902913005066356488917209306734144416494273688587275398401"
+	"286574342126647086142528388913463688579029323572701778860616"
+	"756001247718669706999421391299855093107861718979077137670254"
+	"905536174520523241903142304436697137859439295209346404644166"
+	"711761390620349487220914939651897120727926388356660677435323"
+	"625547360337786161394223954389389446058117065808804208366140"
+	"493746570665942463930129662196390627893075445929601748606307"
+	"958202499548533889369957428980652942467339381021757760595290"
+	"949128312317978915463905710577496069993499968101815574926186"
+	"401282157448075874663202214386004125214284669164849080925085"
+	"632705713354056861779162529531435753356419230493015573530175"
+	"745753158006266269396677249772833504763786905446024002326226"
+	"226069844394696456469125944170649061117616430569366951576780"
+	"483646052120595473175258384884652515381193454199796277521596"
+	"118034639745612232913342101656040627715925878170617283456986"
+	"294695300779325415218701022797603844998079798772855904101844"
+	"159056459473830831057901459789318201715161520805009031848353"
+	"610624913191857631694425153709234711986743373504616972518110"
+	"450759092883471366918423063408319079172524391364120625639910"
+	"155096611756479555514942001115285844108427141128936609315872"
+	"225475276163714476269074772631389944912199514256566104319316"
+	"535301067761376038330783936236162562837145634440924550708191"
+	"351823725714116423996666078590397007518182680822944073177874"
+	"683075104542728594593616393199792939970840185174070552702371"
+	"149226248947684643596987248070222838650635701794832911455548"
+	"416476010590671785568478803908159171377885280203284960130816"
+	"983201742060839934771342421843454177186844218984341762861833"
+	"060742973973373943786358180400348221408237056796733053044602"
+	"089777338572687291218981332309441509314343755039755626278001"
+	"120894173142009875431996141953256786162959026732040321760766"
+	"077412537410119538995389503534794017014809781095208373679856"
+	"442042162260799339089445093204725740343390866588412460138417"
+	"501238761743046793481866577712245948787747925774763517269168"
+	"847157476528582009607513335386955498721639880002645320755792"
+	"353596613175635835219887570538276316368083058805697467162836"
+	"871941182759159280604470776465814562568399855787289458370511"
+	"793625714499473481591205825277202103208168243709328052666519"
+	"272886980095474801425048104284542615114354447437288761756279"
+	"140986696480631960828081981684694205881738194312976203450759"
+	"136706518534321691775141481118864597950894299696438325543299"
+	"924611997129572629620239692190328901749029359531264503669714"
+	"158114998878449928856058461379341535853736467787249622489209"
+	"894085669234235875562651930455794644700403318601460214744959"
+	"935131707975830444487717413652148725681162526346741000762421"
+	"585614539233955268956569057729313306012485365449757557150957"
+	"640806964619664675750524929612637282053923409056469169580654"
+	"471576602558825858190234231148096941222146685242184265048449"
+	"406389486589142456399275122623031705959241319130847014622636"
+	"645823353665797337606714079377636941219178980122532025507944"
+	"459270900569885809871610702518898642834740727905326660004452"
+	"107998798987953695756013107010006005067353768387113818238790"
+	"459083753925242598532663195545585725881875618806369749234255"
+	"004527740012548007992790884685089828390575653282976295050988"
+	"699167592521318840991153224206861088947832645151398111502099"
+	"263039571552035003937270274110791173694789370953847120036374"
+	"066930411684565325903810218050483711078964535952030992938126"
+	"627146374050250745688288225578806971071577080233831770451079"
+	"327939857616370951232609530602233034699771768811872663462865"
+	"067598423791655120150068450411848330556029574474625795186054"
+	"539082653162229058836483798003442805597137006557342037027090"
+	"559214142005150246501679352515095014024360613766491035976911"
+	"451279229342670800644034673267957451959484813619478148869699"
+	"426735577550966697718734964429182302662498553172686513178236"
+	"442838009305515598853210612191656717860412811108032276121357"
+	"378133448066756387125735225403303267524644423863799006207505"
+	"881985449471137991554931339017930009178349349682295047976692"
+	"398330506490102685887034086355679994831062253659247250963448"
+	"491064073545964404715491846754314002476460544975667945044647"
+	"304892282461711772387638463741293238063530671434535471056841"
+	"014058743507762050128559983705197885505633530557061512971186"
+	"030938750397081284373471871281592504026318288871453343113735"
+	"525572236896283639085600117688951315352941610550446421752261"
+	"874153423243206777630669111814199801498554161044899315294894"
+	"586598335471728905486124973447798086405950962299377052511061"
+	"631386583082347892746250089584421636436549943844913465914533"
+	"379999403401028225456633159501820584108048772899363279816807"
+	"047692120594176896502188717868181049930125303933597827970762"
+	"729528769725648996117995894684784043190210530661859483107853"
+	"462208964199390089675673427653193145026697275263799724815197"
+	"42277811246822238899767398834228515626e-4951",
+	false,
+	-0x8p-152,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0,
+	false,
+	-0x4p-1076,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0,
+	false,
+	-0x8p-16448,
+	-0x8p-16448,
+	-0x0p+0,
+	-0x0p+0,
+	false,
+	-0x8p-16448,
+	-0x4p-16448,
+	-0x4p-16448,
+	-0x4p-16448,
+	false,
+	-0x4p-1076,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0,
+	false,
+	-0x4.000000000004p-16448,
+	-0x4p-16448,
+	-0x4p-16448,
+	-0x4p-16448),
+  TEST ("9.1129988297061865063210148340485495409976270392339083593024"
+	"512175709292215834943420239017715645680129931183683680088277"
+	"549174640815550804249337701889745225137095564529448291964230"
+	"631595140838993915539064149585268223507994838838181714781019"
+	"998854320275387963459576151369217885561232382646492956705356"
+	"565551688308886521101701981493843492205658474297570333866605"
+	"298932345300005419066807300806935840975771140138244887971382"
+	"480306383029279087190728461573250887846318754007832114464683"
+	"664171452083726328092629849717599582714695998658062536715061"
+	"486659414671761410590867756059929866471508939201678361949569"
+	"105493407320443782389013421144031696166197712936581273093400"
+	"987818069535398834152409986110085052926337211200549444090110"
+	"947717190581225852922732363763307088865106375411776212774753"
+	"881242370509404376819363039948120731604116820734480620859463"
+	"053721188111541333511328522463373472526999986652124894823521"
+	"677055629197452315658307103340838430759142765166817775402542"
+	"424672713638170402336169639395588632161416761622732176576564"
+	"689048255479820989367151993310018548316769814664606197581315"
+	"042862562791300468342638911941746410076541796524707525552225"
+	"218810105957345303035393963179488682040705817772149861464367"
+	"875846321939885650620019792999548883603797914975087595720555"
+	"008891649198969277273442210230776269093622052361408012106817"
+	"903069953745909041514739880227089422181355813323880743747316"
+	"013769073985956031962404845484551938647636529313699033511745"
+	"442279141902356533018143182815187073441328510540492152576488"
+	"229985535798436239152483434901576880457556096136883541949311"
+	"550953165672585204177162938634659553875223901648885259822873"
+	"815598197021178988329613387166662012014085188285709633232513"
+	"061942105426273781618686365893871655369623538557877775965767"
+	"109785630310982604764603059355574307115163437126311616216384"
+	"242977475669012957189024924930269461826674503235685685987925"
+	"809774119784191955543740774385492835953479066971963899979438"
+	"211272068701163464704436181757668455872462574422571325034113"
+	"760130682177348501458144714636434216374798906646576252086802"
+	"190576650522584472987248024379770735540050259550986944302085"
+	"016537978874317385914557625547772714417301204338373972354274"
+	"419077120195935070346230688523551832885027881558371920399052"
+	"186032556413960972812515180755144550327091852825587440311130"
+	"369879274596217199708705082236031422718889130402045378780140"
+	"972327814060383227111423352378654611732272529152765871889754"
+	"120890173540735187244359494818495116869106087097802117296794"
+	"230636162657107764132729771811932156398134588213625909013771"
+	"355672989281159028330647620507547914707927109442806484197371"
+	"160282370564676895887174641137770747013214469567460313906231"
+	"863055876527311358559655058178010195688508347865329804729357"
+	"897103417200485899156841586760786011075803410294390125765035"
+	"920926599317258260436879683255022799187512419040453065369911"
+	"323428101759967597271722888176287261643418634944123527371986"
+	"991235954064415358673716302132700617408956418914644864212332"
+	"976051347071095204508969677769360451886970029662989435406797"
+	"409579245892705640914616364216092565465060838723454093018319"
+	"313458636362826625288516894137766424262510338430134251698122"
+	"005230434085183091834211200122610210349443542674137356176019"
+	"994661296545554711839281438920485832102187150591906236696737"
+	"090784511846412155988675390082958065319591301717494963485010"
+	"165932792068277883516946041506017760788778509260259389639323"
+	"482577101846088517553013799076262873998643533979247791914386"
+	"960081984502800508683707313453769958011319871060688162544921"
+	"322796577704456915961808005946752071556794084904878487842807"
+	"578404859150538520763286422764601209313650629444128511505177"
+	"823078798079410053668821705549172247884539912031329017420556"
+	"518079856488045326357586430559199198231719076822308881971367"
+	"856956096577769576676503111475982888204421007623288070328718"
+	"645608772303264875379950063930108312080388786177437812751905"
+	"584120030072202190891266365873672180818190597661476916755677"
+	"715854057980258925181834233866429689226159872122377094852588"
+	"295898990349864384447444388136549436618687954074375252286589"
+	"048125818566139866145014540017458695425579859498034933692028"
+	"762317180933725539105161577403467580031256943949510269316175"
+	"359789478610609381312994169116761450212882441190603620361337"
+	"401742128185995015738801892316215217037671976109410724436579"
+	"379380129538698961487878976867532145962342350850191560252504"
+	"588328537917104636518954376662039025472528325798776052476332"
+	"427970936224611080771416068440161969697007132497588046375640"
+	"310336775861665604288980226938462461877670282350726508356795"
+	"083014162348375615542992942120111083796673667263131651518958"
+	"304763295180814137547257343856489773685828509608384174334970"
+	"422481342457552997903572290775133733384303950144498613229418"
+	"397179849510232211865542364757577463809559424236059129650578"
+	"274637695590441751279797225383786991494466903311241791050376"
+	"488510955932598072576401976708615886006919314135648608248191"
+	"372656573811888893772800596985615900536551083040785709141896"
+	"296641372542336858585285155522688752251142239708098420366878"
+	"152586610030593201454626208011881281672071882478014556327250"
+	"829447091860808595318353098051073163872713705786832133739305"
+	"274057247245024850663340733036617513800734787932326379905451"
+	"641681281905937253230152460358472580273562222569806348116698"
+	"527056831689088216346583586087162394060010249474899626302057"
+	"768256926924131071156960064207129684139721916331135576180148"
+	"586965323299105282337234352989143787169680122112557687809323"
+	"099327979778140351718902363172319583042200757772513950642086"
+	"386297462185028482882268586936548025649697633305907484971486"
+	"223468552187182907218267776718819086234809172430906474927279"
+	"424906332107667190886359046554485179791303881091265489293005"
+	"803215603269635123264170125730831784388656332832186157145305"
+	"499039125566362759346764541205369778479271774262726853968049"
+	"190835636788762895037454777680406940517308675355872838184645"
+	"304120861875050177485053074785988569599549623179532516740082"
+	"254762377654894606213282493506567652669958464338099434131023"
+	"532342380354716890817886177034306313775574548031278141878295"
+	"980251853307150740536081553178646800560107856455481390160382"
+	"005461126866350869752876888962834360568840429704959648279120"
+	"254570425069854306995075705052164177031686333733533637409730"
+	"984494412360475557526051699665012526136673750101428368173353"
+	"692291950799667471134257499676684610182758435845702912870768"
+	"634362269004291803824464876008785139313163075651280377342747"
+	"514196839209631064363659625214193456598788316913732358910439"
+	"144944289890962417978739445105407297303138526378679343093624"
+	"793916741811475534377782218853134322959860449406077325705367"
+	"583234650794982848738379033597318010226151625248974524473699"
+	"941563637866604856552441632431065309199219150015729366397177"
+	"270609089591346091474506939150782160740711907964322876145597"
+	"395145650253317824445860465336707220824713684429363769920064"
+	"328717106332354307126419445673184428951466178635088943030837"
+	"800062385933485349971069564992754655393085948953856883512745"
+	"276808726026162095157115221834856892971964760467320232208335"
+	"588069531017474361045746982594856036396319417833033871766181"
+	"277368016889308069711197719469472302905853290440210418307024"
+	"687328533297123196506483109819531394653772296480087430315397"
+	"910124977426694468497871449032647123366969051087888029764547"
+	"456415615898945773195285528874803499674998405090778746309320"
+	"064107872403793733160110719300206260714233458242454046254281"
+	"635285667702843088958126476571787667820961524650778676508787"
+	"287657900313313469833862488641675238189345272301200116311311"
+	"303492219734822823456297208532453055880821528468347578839024"
+	"182302606029773658762919244232625769059672709989813876079805"
+	"901731987280611645667105082802031385796293908530864172849314"
+	"734765038966270760935051139880192249903989938642795205092207"
+	"952822973691541552895072989465910085758076040250451592417680"
+	"531245659592881584721257685461735599337168675230848625905522"
+	"537954644173568345921153170415953958626219568206031281995507"
+	"754830587823977775747100055764292205421357056446830465793611"
+	"273763808185723813453738631569497245609975712828305215965826"
+	"765053388068801916539196811808128141857281722046227535409567"
+	"591186285705821199833303929519850375909134041147203658893734"
+	"153755227136429729680819659989646998542009258703527635118557"
+	"461312447384232179849362403511141932531785089741645572777420"
+	"823800529533589278423940195407958568894264010164248006540849"
+	"160087103041996738567121092172708859342210949217088143091653"
+	"037148698668697189317909020017411070411852839836652652230104"
+	"488866928634364560949066615472075465717187751987781313900056"
+	"044708657100493771599807097662839308147951336602016088038303"
+	"870626870505976949769475176739700850740489054760418683992822"
+	"102108113039966954472254660236287017169543329420623006920875"
+	"061938087152339674093328885612297439387396288738175863458442"
+	"357873826429100480375666769347774936081994000132266037789617"
+	"679830658781791760994378526913815818404152940284873358141843"
+	"597059137957964030223538823290728128419992789364472918525589"
+	"681285724973674079560291263860105160408412185466402633325963"
+	"644349004773740071252405214227130755717722371864438087813957"
+	"049334824031598041404099084234710294086909715648810172537956"
+	"835325926716084588757074055943229897544714984821916277164996"
+	"230599856478631481011984609516445087451467976563225183485707"
+	"905749943922496442802923068967076792686823389362481124460494"
+	"704283461711793778132596522789732235020165930073010737247996"
+	"756585398791522224385870682607436284058126317337050038121079"
+	"280726961697763447828452886465665300624268272487877857547882"
+	"040348230983233787526246480631864102696170452823458479032723"
+	"578830127941292909511711557404847061107334262109213252422470"
+	"319474329457122819963756131151585297962065956542350731131832"
+	"291167683289866880335703968881847060958949006126601275397222"
+	"963545028494290493580535125944932141737036395266333000222605"
+	"399939949397684787800655350500300253367688419355690911939522"
+	"954187696262129926633159777279286294093780940318487461712750"
+	"226387000627400399639544234254491419528782664148814752549434"
+	"958379626065942049557661210343054447391632257569905575104963"
+	"151978577601750196863513705539558684739468547692356001818703"
+	"346520584228266295190510902524185553948226797601549646906331"
+	"357318702512537284414411278940348553578854011691588522553966"
+	"396992880818547561630476530111651734988588440593633173143253"
+	"379921189582756007503422520592416527801478723731289759302726"
+	"954132658111452941824189900172140279856850327867101851354527"
+	"960707100257512325083967625754750701218030688324551798845572"
+	"563961467133540032201733663397872597974240680973907443484971"
+	"336778877548334885936748221459115133124927658634325658911822"
+	"141900465275779942660530609582835893020640555401613806067868"
+	"906672403337819356286761270165163376232221193189950310375294"
+	"099272473556899577746566950896500458917467484114752398834619"
+	"916525324505134294351704317783999741553112682962362548172424"
+	"553203677298220235774592337715700123823027248783397252232365"
+	"244614123085588619381923187064661903176533571726773552842050"
+	"702937175388102506427999185259894275281676527853075648559301"
+	"546937519854064218673593564079625201315914443572667155686776"
+	"278611844814181954280005884447565767647080527522321087613093"
+	"707671162160338881533455590709990074927708052244965764744729"
+	"329916773586445274306248672389904320297548114968852625553081"
+	"569329154117394637312504479221081821827497192245673295726668"
+	"999970170051411272831657975091029205402438644968163990840352"
+	"384606029708844825109435893409052496506265196679891398538136"
+	"476438486282449805899794734239202159510526533092974155392673"
+	"110448209969504483783671382659657251334863763189986240759871"
+	"1389056234111194498836994171142578124e-4952",
+	false,
+	0x0p+0,
+	0x0p+0,
+	0x0p+0,
+	0x8p-152,
+	false,
+	0x0p+0,
+	0x0p+0,
+	0x0p+0,
+	0x4p-1076,
+	false,
+	0x0p+0,
+	0x0p+0,
+	0x0p+0,
+	0x8p-16448,
+	false,
+	0x0p+0,
+	0x0p+0,
+	0x0p+0,
+	0x4p-16448,
+	false,
+	0x0p+0,
+	0x0p+0,
+	0x0p+0,
+	0x4p-1076,
+	false,
+	0x1.fffffffffffcp-16448,
+	0x2p-16448,
+	0x1.fffffffffffcp-16448,
+	0x2p-16448),
+  TEST ("9.1129988297061865063210148340485495409976270392339083593024"
+	"512175709292215834943420239017715645680129931183683680088277"
+	"549174640815550804249337701889745225137095564529448291964230"
+	"631595140838993915539064149585268223507994838838181714781019"
+	"998854320275387963459576151369217885561232382646492956705356"
+	"565551688308886521101701981493843492205658474297570333866605"
+	"298932345300005419066807300806935840975771140138244887971382"
+	"480306383029279087190728461573250887846318754007832114464683"
+	"664171452083726328092629849717599582714695998658062536715061"
+	"486659414671761410590867756059929866471508939201678361949569"
+	"105493407320443782389013421144031696166197712936581273093400"
+	"987818069535398834152409986110085052926337211200549444090110"
+	"947717190581225852922732363763307088865106375411776212774753"
+	"881242370509404376819363039948120731604116820734480620859463"
+	"053721188111541333511328522463373472526999986652124894823521"
+	"677055629197452315658307103340838430759142765166817775402542"
+	"424672713638170402336169639395588632161416761622732176576564"
+	"689048255479820989367151993310018548316769814664606197581315"
+	"042862562791300468342638911941746410076541796524707525552225"
+	"218810105957345303035393963179488682040705817772149861464367"
+	"875846321939885650620019792999548883603797914975087595720555"
+	"008891649198969277273442210230776269093622052361408012106817"
+	"903069953745909041514739880227089422181355813323880743747316"
+	"013769073985956031962404845484551938647636529313699033511745"
+	"442279141902356533018143182815187073441328510540492152576488"
+	"229985535798436239152483434901576880457556096136883541949311"
+	"550953165672585204177162938634659553875223901648885259822873"
+	"815598197021178988329613387166662012014085188285709633232513"
+	"061942105426273781618686365893871655369623538557877775965767"
+	"109785630310982604764603059355574307115163437126311616216384"
+	"242977475669012957189024924930269461826674503235685685987925"
+	"809774119784191955543740774385492835953479066971963899979438"
+	"211272068701163464704436181757668455872462574422571325034113"
+	"760130682177348501458144714636434216374798906646576252086802"
+	"190576650522584472987248024379770735540050259550986944302085"
+	"016537978874317385914557625547772714417301204338373972354274"
+	"419077120195935070346230688523551832885027881558371920399052"
+	"186032556413960972812515180755144550327091852825587440311130"
+	"369879274596217199708705082236031422718889130402045378780140"
+	"972327814060383227111423352378654611732272529152765871889754"
+	"120890173540735187244359494818495116869106087097802117296794"
+	"230636162657107764132729771811932156398134588213625909013771"
+	"355672989281159028330647620507547914707927109442806484197371"
+	"160282370564676895887174641137770747013214469567460313906231"
+	"863055876527311358559655058178010195688508347865329804729357"
+	"897103417200485899156841586760786011075803410294390125765035"
+	"920926599317258260436879683255022799187512419040453065369911"
+	"323428101759967597271722888176287261643418634944123527371986"
+	"991235954064415358673716302132700617408956418914644864212332"
+	"976051347071095204508969677769360451886970029662989435406797"
+	"409579245892705640914616364216092565465060838723454093018319"
+	"313458636362826625288516894137766424262510338430134251698122"
+	"005230434085183091834211200122610210349443542674137356176019"
+	"994661296545554711839281438920485832102187150591906236696737"
+	"090784511846412155988675390082958065319591301717494963485010"
+	"165932792068277883516946041506017760788778509260259389639323"
+	"482577101846088517553013799076262873998643533979247791914386"
+	"960081984502800508683707313453769958011319871060688162544921"
+	"322796577704456915961808005946752071556794084904878487842807"
+	"578404859150538520763286422764601209313650629444128511505177"
+	"823078798079410053668821705549172247884539912031329017420556"
+	"518079856488045326357586430559199198231719076822308881971367"
+	"856956096577769576676503111475982888204421007623288070328718"
+	"645608772303264875379950063930108312080388786177437812751905"
+	"584120030072202190891266365873672180818190597661476916755677"
+	"715854057980258925181834233866429689226159872122377094852588"
+	"295898990349864384447444388136549436618687954074375252286589"
+	"048125818566139866145014540017458695425579859498034933692028"
+	"762317180933725539105161577403467580031256943949510269316175"
+	"359789478610609381312994169116761450212882441190603620361337"
+	"401742128185995015738801892316215217037671976109410724436579"
+	"379380129538698961487878976867532145962342350850191560252504"
+	"588328537917104636518954376662039025472528325798776052476332"
+	"427970936224611080771416068440161969697007132497588046375640"
+	"310336775861665604288980226938462461877670282350726508356795"
+	"083014162348375615542992942120111083796673667263131651518958"
+	"304763295180814137547257343856489773685828509608384174334970"
+	"422481342457552997903572290775133733384303950144498613229418"
+	"397179849510232211865542364757577463809559424236059129650578"
+	"274637695590441751279797225383786991494466903311241791050376"
+	"488510955932598072576401976708615886006919314135648608248191"
+	"372656573811888893772800596985615900536551083040785709141896"
+	"296641372542336858585285155522688752251142239708098420366878"
+	"152586610030593201454626208011881281672071882478014556327250"
+	"829447091860808595318353098051073163872713705786832133739305"
+	"274057247245024850663340733036617513800734787932326379905451"
+	"641681281905937253230152460358472580273562222569806348116698"
+	"527056831689088216346583586087162394060010249474899626302057"
+	"768256926924131071156960064207129684139721916331135576180148"
+	"586965323299105282337234352989143787169680122112557687809323"
+	"099327979778140351718902363172319583042200757772513950642086"
+	"386297462185028482882268586936548025649697633305907484971486"
+	"223468552187182907218267776718819086234809172430906474927279"
+	"424906332107667190886359046554485179791303881091265489293005"
+	"803215603269635123264170125730831784388656332832186157145305"
+	"499039125566362759346764541205369778479271774262726853968049"
+	"190835636788762895037454777680406940517308675355872838184645"
+	"304120861875050177485053074785988569599549623179532516740082"
+	"254762377654894606213282493506567652669958464338099434131023"
+	"532342380354716890817886177034306313775574548031278141878295"
+	"980251853307150740536081553178646800560107856455481390160382"
+	"005461126866350869752876888962834360568840429704959648279120"
+	"254570425069854306995075705052164177031686333733533637409730"
+	"984494412360475557526051699665012526136673750101428368173353"
+	"692291950799667471134257499676684610182758435845702912870768"
+	"634362269004291803824464876008785139313163075651280377342747"
+	"514196839209631064363659625214193456598788316913732358910439"
+	"144944289890962417978739445105407297303138526378679343093624"
+	"793916741811475534377782218853134322959860449406077325705367"
+	"583234650794982848738379033597318010226151625248974524473699"
+	"941563637866604856552441632431065309199219150015729366397177"
+	"270609089591346091474506939150782160740711907964322876145597"
+	"395145650253317824445860465336707220824713684429363769920064"
+	"328717106332354307126419445673184428951466178635088943030837"
+	"800062385933485349971069564992754655393085948953856883512745"
+	"276808726026162095157115221834856892971964760467320232208335"
+	"588069531017474361045746982594856036396319417833033871766181"
+	"277368016889308069711197719469472302905853290440210418307024"
+	"687328533297123196506483109819531394653772296480087430315397"
+	"910124977426694468497871449032647123366969051087888029764547"
+	"456415615898945773195285528874803499674998405090778746309320"
+	"064107872403793733160110719300206260714233458242454046254281"
+	"635285667702843088958126476571787667820961524650778676508787"
+	"287657900313313469833862488641675238189345272301200116311311"
+	"303492219734822823456297208532453055880821528468347578839024"
+	"182302606029773658762919244232625769059672709989813876079805"
+	"901731987280611645667105082802031385796293908530864172849314"
+	"734765038966270760935051139880192249903989938642795205092207"
+	"952822973691541552895072989465910085758076040250451592417680"
+	"531245659592881584721257685461735599337168675230848625905522"
+	"537954644173568345921153170415953958626219568206031281995507"
+	"754830587823977775747100055764292205421357056446830465793611"
+	"273763808185723813453738631569497245609975712828305215965826"
+	"765053388068801916539196811808128141857281722046227535409567"
+	"591186285705821199833303929519850375909134041147203658893734"
+	"153755227136429729680819659989646998542009258703527635118557"
+	"461312447384232179849362403511141932531785089741645572777420"
+	"823800529533589278423940195407958568894264010164248006540849"
+	"160087103041996738567121092172708859342210949217088143091653"
+	"037148698668697189317909020017411070411852839836652652230104"
+	"488866928634364560949066615472075465717187751987781313900056"
+	"044708657100493771599807097662839308147951336602016088038303"
+	"870626870505976949769475176739700850740489054760418683992822"
+	"102108113039966954472254660236287017169543329420623006920875"
+	"061938087152339674093328885612297439387396288738175863458442"
+	"357873826429100480375666769347774936081994000132266037789617"
+	"679830658781791760994378526913815818404152940284873358141843"
+	"597059137957964030223538823290728128419992789364472918525589"
+	"681285724973674079560291263860105160408412185466402633325963"
+	"644349004773740071252405214227130755717722371864438087813957"
+	"049334824031598041404099084234710294086909715648810172537956"
+	"835325926716084588757074055943229897544714984821916277164996"
+	"230599856478631481011984609516445087451467976563225183485707"
+	"905749943922496442802923068967076792686823389362481124460494"
+	"704283461711793778132596522789732235020165930073010737247996"
+	"756585398791522224385870682607436284058126317337050038121079"
+	"280726961697763447828452886465665300624268272487877857547882"
+	"040348230983233787526246480631864102696170452823458479032723"
+	"578830127941292909511711557404847061107334262109213252422470"
+	"319474329457122819963756131151585297962065956542350731131832"
+	"291167683289866880335703968881847060958949006126601275397222"
+	"963545028494290493580535125944932141737036395266333000222605"
+	"399939949397684787800655350500300253367688419355690911939522"
+	"954187696262129926633159777279286294093780940318487461712750"
+	"226387000627400399639544234254491419528782664148814752549434"
+	"958379626065942049557661210343054447391632257569905575104963"
+	"151978577601750196863513705539558684739468547692356001818703"
+	"346520584228266295190510902524185553948226797601549646906331"
+	"357318702512537284414411278940348553578854011691588522553966"
+	"396992880818547561630476530111651734988588440593633173143253"
+	"379921189582756007503422520592416527801478723731289759302726"
+	"954132658111452941824189900172140279856850327867101851354527"
+	"960707100257512325083967625754750701218030688324551798845572"
+	"563961467133540032201733663397872597974240680973907443484971"
+	"336778877548334885936748221459115133124927658634325658911822"
+	"141900465275779942660530609582835893020640555401613806067868"
+	"906672403337819356286761270165163376232221193189950310375294"
+	"099272473556899577746566950896500458917467484114752398834619"
+	"916525324505134294351704317783999741553112682962362548172424"
+	"553203677298220235774592337715700123823027248783397252232365"
+	"244614123085588619381923187064661903176533571726773552842050"
+	"702937175388102506427999185259894275281676527853075648559301"
+	"546937519854064218673593564079625201315914443572667155686776"
+	"278611844814181954280005884447565767647080527522321087613093"
+	"707671162160338881533455590709990074927708052244965764744729"
+	"329916773586445274306248672389904320297548114968852625553081"
+	"569329154117394637312504479221081821827497192245673295726668"
+	"999970170051411272831657975091029205402438644968163990840352"
+	"384606029708844825109435893409052496506265196679891398538136"
+	"476438486282449805899794734239202159510526533092974155392673"
+	"110448209969504483783671382659657251334863763189986240759871"
+	"1389056234111194498836994171142578125e-4952",
+	false,
+	0x0p+0,
+	0x0p+0,
+	0x0p+0,
+	0x8p-152,
+	false,
+	0x0p+0,
+	0x0p+0,
+	0x0p+0,
+	0x4p-1076,
+	false,
+	0x0p+0,
+	0x0p+0,
+	0x0p+0,
+	0x8p-16448,
+	false,
+	0x0p+0,
+	0x0p+0,
+	0x0p+0,
+	0x4p-16448,
+	false,
+	0x0p+0,
+	0x0p+0,
+	0x0p+0,
+	0x4p-1076,
+	true,
+	0x2p-16448,
+	0x2p-16448,
+	0x2p-16448,
+	0x2p-16448),
+  TEST ("9.1129988297061865063210148340485495409976270392339083593024"
+	"512175709292215834943420239017715645680129931183683680088277"
+	"549174640815550804249337701889745225137095564529448291964230"
+	"631595140838993915539064149585268223507994838838181714781019"
+	"998854320275387963459576151369217885561232382646492956705356"
+	"565551688308886521101701981493843492205658474297570333866605"
+	"298932345300005419066807300806935840975771140138244887971382"
+	"480306383029279087190728461573250887846318754007832114464683"
+	"664171452083726328092629849717599582714695998658062536715061"
+	"486659414671761410590867756059929866471508939201678361949569"
+	"105493407320443782389013421144031696166197712936581273093400"
+	"987818069535398834152409986110085052926337211200549444090110"
+	"947717190581225852922732363763307088865106375411776212774753"
+	"881242370509404376819363039948120731604116820734480620859463"
+	"053721188111541333511328522463373472526999986652124894823521"
+	"677055629197452315658307103340838430759142765166817775402542"
+	"424672713638170402336169639395588632161416761622732176576564"
+	"689048255479820989367151993310018548316769814664606197581315"
+	"042862562791300468342638911941746410076541796524707525552225"
+	"218810105957345303035393963179488682040705817772149861464367"
+	"875846321939885650620019792999548883603797914975087595720555"
+	"008891649198969277273442210230776269093622052361408012106817"
+	"903069953745909041514739880227089422181355813323880743747316"
+	"013769073985956031962404845484551938647636529313699033511745"
+	"442279141902356533018143182815187073441328510540492152576488"
+	"229985535798436239152483434901576880457556096136883541949311"
+	"550953165672585204177162938634659553875223901648885259822873"
+	"815598197021178988329613387166662012014085188285709633232513"
+	"061942105426273781618686365893871655369623538557877775965767"
+	"109785630310982604764603059355574307115163437126311616216384"
+	"242977475669012957189024924930269461826674503235685685987925"
+	"809774119784191955543740774385492835953479066971963899979438"
+	"211272068701163464704436181757668455872462574422571325034113"
+	"760130682177348501458144714636434216374798906646576252086802"
+	"190576650522584472987248024379770735540050259550986944302085"
+	"016537978874317385914557625547772714417301204338373972354274"
+	"419077120195935070346230688523551832885027881558371920399052"
+	"186032556413960972812515180755144550327091852825587440311130"
+	"369879274596217199708705082236031422718889130402045378780140"
+	"972327814060383227111423352378654611732272529152765871889754"
+	"120890173540735187244359494818495116869106087097802117296794"
+	"230636162657107764132729771811932156398134588213625909013771"
+	"355672989281159028330647620507547914707927109442806484197371"
+	"160282370564676895887174641137770747013214469567460313906231"
+	"863055876527311358559655058178010195688508347865329804729357"
+	"897103417200485899156841586760786011075803410294390125765035"
+	"920926599317258260436879683255022799187512419040453065369911"
+	"323428101759967597271722888176287261643418634944123527371986"
+	"991235954064415358673716302132700617408956418914644864212332"
+	"976051347071095204508969677769360451886970029662989435406797"
+	"409579245892705640914616364216092565465060838723454093018319"
+	"313458636362826625288516894137766424262510338430134251698122"
+	"005230434085183091834211200122610210349443542674137356176019"
+	"994661296545554711839281438920485832102187150591906236696737"
+	"090784511846412155988675390082958065319591301717494963485010"
+	"165932792068277883516946041506017760788778509260259389639323"
+	"482577101846088517553013799076262873998643533979247791914386"
+	"960081984502800508683707313453769958011319871060688162544921"
+	"322796577704456915961808005946752071556794084904878487842807"
+	"578404859150538520763286422764601209313650629444128511505177"
+	"823078798079410053668821705549172247884539912031329017420556"
+	"518079856488045326357586430559199198231719076822308881971367"
+	"856956096577769576676503111475982888204421007623288070328718"
+	"645608772303264875379950063930108312080388786177437812751905"
+	"584120030072202190891266365873672180818190597661476916755677"
+	"715854057980258925181834233866429689226159872122377094852588"
+	"295898990349864384447444388136549436618687954074375252286589"
+	"048125818566139866145014540017458695425579859498034933692028"
+	"762317180933725539105161577403467580031256943949510269316175"
+	"359789478610609381312994169116761450212882441190603620361337"
+	"401742128185995015738801892316215217037671976109410724436579"
+	"379380129538698961487878976867532145962342350850191560252504"
+	"588328537917104636518954376662039025472528325798776052476332"
+	"427970936224611080771416068440161969697007132497588046375640"
+	"310336775861665604288980226938462461877670282350726508356795"
+	"083014162348375615542992942120111083796673667263131651518958"
+	"304763295180814137547257343856489773685828509608384174334970"
+	"422481342457552997903572290775133733384303950144498613229418"
+	"397179849510232211865542364757577463809559424236059129650578"
+	"274637695590441751279797225383786991494466903311241791050376"
+	"488510955932598072576401976708615886006919314135648608248191"
+	"372656573811888893772800596985615900536551083040785709141896"
+	"296641372542336858585285155522688752251142239708098420366878"
+	"152586610030593201454626208011881281672071882478014556327250"
+	"829447091860808595318353098051073163872713705786832133739305"
+	"274057247245024850663340733036617513800734787932326379905451"
+	"641681281905937253230152460358472580273562222569806348116698"
+	"527056831689088216346583586087162394060010249474899626302057"
+	"768256926924131071156960064207129684139721916331135576180148"
+	"586965323299105282337234352989143787169680122112557687809323"
+	"099327979778140351718902363172319583042200757772513950642086"
+	"386297462185028482882268586936548025649697633305907484971486"
+	"223468552187182907218267776718819086234809172430906474927279"
+	"424906332107667190886359046554485179791303881091265489293005"
+	"803215603269635123264170125730831784388656332832186157145305"
+	"499039125566362759346764541205369778479271774262726853968049"
+	"190835636788762895037454777680406940517308675355872838184645"
+	"304120861875050177485053074785988569599549623179532516740082"
+	"254762377654894606213282493506567652669958464338099434131023"
+	"532342380354716890817886177034306313775574548031278141878295"
+	"980251853307150740536081553178646800560107856455481390160382"
+	"005461126866350869752876888962834360568840429704959648279120"
+	"254570425069854306995075705052164177031686333733533637409730"
+	"984494412360475557526051699665012526136673750101428368173353"
+	"692291950799667471134257499676684610182758435845702912870768"
+	"634362269004291803824464876008785139313163075651280377342747"
+	"514196839209631064363659625214193456598788316913732358910439"
+	"144944289890962417978739445105407297303138526378679343093624"
+	"793916741811475534377782218853134322959860449406077325705367"
+	"583234650794982848738379033597318010226151625248974524473699"
+	"941563637866604856552441632431065309199219150015729366397177"
+	"270609089591346091474506939150782160740711907964322876145597"
+	"395145650253317824445860465336707220824713684429363769920064"
+	"328717106332354307126419445673184428951466178635088943030837"
+	"800062385933485349971069564992754655393085948953856883512745"
+	"276808726026162095157115221834856892971964760467320232208335"
+	"588069531017474361045746982594856036396319417833033871766181"
+	"277368016889308069711197719469472302905853290440210418307024"
+	"687328533297123196506483109819531394653772296480087430315397"
+	"910124977426694468497871449032647123366969051087888029764547"
+	"456415615898945773195285528874803499674998405090778746309320"
+	"064107872403793733160110719300206260714233458242454046254281"
+	"635285667702843088958126476571787667820961524650778676508787"
+	"287657900313313469833862488641675238189345272301200116311311"
+	"303492219734822823456297208532453055880821528468347578839024"
+	"182302606029773658762919244232625769059672709989813876079805"
+	"901731987280611645667105082802031385796293908530864172849314"
+	"734765038966270760935051139880192249903989938642795205092207"
+	"952822973691541552895072989465910085758076040250451592417680"
+	"531245659592881584721257685461735599337168675230848625905522"
+	"537954644173568345921153170415953958626219568206031281995507"
+	"754830587823977775747100055764292205421357056446830465793611"
+	"273763808185723813453738631569497245609975712828305215965826"
+	"765053388068801916539196811808128141857281722046227535409567"
+	"591186285705821199833303929519850375909134041147203658893734"
+	"153755227136429729680819659989646998542009258703527635118557"
+	"461312447384232179849362403511141932531785089741645572777420"
+	"823800529533589278423940195407958568894264010164248006540849"
+	"160087103041996738567121092172708859342210949217088143091653"
+	"037148698668697189317909020017411070411852839836652652230104"
+	"488866928634364560949066615472075465717187751987781313900056"
+	"044708657100493771599807097662839308147951336602016088038303"
+	"870626870505976949769475176739700850740489054760418683992822"
+	"102108113039966954472254660236287017169543329420623006920875"
+	"061938087152339674093328885612297439387396288738175863458442"
+	"357873826429100480375666769347774936081994000132266037789617"
+	"679830658781791760994378526913815818404152940284873358141843"
+	"597059137957964030223538823290728128419992789364472918525589"
+	"681285724973674079560291263860105160408412185466402633325963"
+	"644349004773740071252405214227130755717722371864438087813957"
+	"049334824031598041404099084234710294086909715648810172537956"
+	"835325926716084588757074055943229897544714984821916277164996"
+	"230599856478631481011984609516445087451467976563225183485707"
+	"905749943922496442802923068967076792686823389362481124460494"
+	"704283461711793778132596522789732235020165930073010737247996"
+	"756585398791522224385870682607436284058126317337050038121079"
+	"280726961697763447828452886465665300624268272487877857547882"
+	"040348230983233787526246480631864102696170452823458479032723"
+	"578830127941292909511711557404847061107334262109213252422470"
+	"319474329457122819963756131151585297962065956542350731131832"
+	"291167683289866880335703968881847060958949006126601275397222"
+	"963545028494290493580535125944932141737036395266333000222605"
+	"399939949397684787800655350500300253367688419355690911939522"
+	"954187696262129926633159777279286294093780940318487461712750"
+	"226387000627400399639544234254491419528782664148814752549434"
+	"958379626065942049557661210343054447391632257569905575104963"
+	"151978577601750196863513705539558684739468547692356001818703"
+	"346520584228266295190510902524185553948226797601549646906331"
+	"357318702512537284414411278940348553578854011691588522553966"
+	"396992880818547561630476530111651734988588440593633173143253"
+	"379921189582756007503422520592416527801478723731289759302726"
+	"954132658111452941824189900172140279856850327867101851354527"
+	"960707100257512325083967625754750701218030688324551798845572"
+	"563961467133540032201733663397872597974240680973907443484971"
+	"336778877548334885936748221459115133124927658634325658911822"
+	"141900465275779942660530609582835893020640555401613806067868"
+	"906672403337819356286761270165163376232221193189950310375294"
+	"099272473556899577746566950896500458917467484114752398834619"
+	"916525324505134294351704317783999741553112682962362548172424"
+	"553203677298220235774592337715700123823027248783397252232365"
+	"244614123085588619381923187064661903176533571726773552842050"
+	"702937175388102506427999185259894275281676527853075648559301"
+	"546937519854064218673593564079625201315914443572667155686776"
+	"278611844814181954280005884447565767647080527522321087613093"
+	"707671162160338881533455590709990074927708052244965764744729"
+	"329916773586445274306248672389904320297548114968852625553081"
+	"569329154117394637312504479221081821827497192245673295726668"
+	"999970170051411272831657975091029205402438644968163990840352"
+	"384606029708844825109435893409052496506265196679891398538136"
+	"476438486282449805899794734239202159510526533092974155392673"
+	"110448209969504483783671382659657251334863763189986240759871"
+	"1389056234111194498836994171142578126e-4952",
+	false,
+	0x0p+0,
+	0x0p+0,
+	0x0p+0,
+	0x8p-152,
+	false,
+	0x0p+0,
+	0x0p+0,
+	0x0p+0,
+	0x4p-1076,
+	false,
+	0x0p+0,
+	0x0p+0,
+	0x0p+0,
+	0x8p-16448,
+	false,
+	0x0p+0,
+	0x4p-16448,
+	0x0p+0,
+	0x4p-16448,
+	false,
+	0x0p+0,
+	0x0p+0,
+	0x0p+0,
+	0x4p-1076,
+	false,
+	0x2p-16448,
+	0x2p-16448,
+	0x2p-16448,
+	0x2.000000000004p-16448),
+  TEST ("-9.112998829706186506321014834048549540997627039233908359302"
+	"451217570929221583494342023901771564568012993118368368008827"
+	"754917464081555080424933770188974522513709556452944829196423"
+	"063159514083899391553906414958526822350799483883818171478101"
+	"999885432027538796345957615136921788556123238264649295670535"
+	"656555168830888652110170198149384349220565847429757033386660"
+	"529893234530000541906680730080693584097577114013824488797138"
+	"248030638302927908719072846157325088784631875400783211446468"
+	"366417145208372632809262984971759958271469599865806253671506"
+	"148665941467176141059086775605992986647150893920167836194956"
+	"910549340732044378238901342114403169616619771293658127309340"
+	"098781806953539883415240998611008505292633721120054944409011"
+	"094771719058122585292273236376330708886510637541177621277475"
+	"388124237050940437681936303994812073160411682073448062085946"
+	"305372118811154133351132852246337347252699998665212489482352"
+	"167705562919745231565830710334083843075914276516681777540254"
+	"242467271363817040233616963939558863216141676162273217657656"
+	"468904825547982098936715199331001854831676981466460619758131"
+	"504286256279130046834263891194174641007654179652470752555222"
+	"521881010595734530303539396317948868204070581777214986146436"
+	"787584632193988565062001979299954888360379791497508759572055"
+	"500889164919896927727344221023077626909362205236140801210681"
+	"790306995374590904151473988022708942218135581332388074374731"
+	"601376907398595603196240484548455193864763652931369903351174"
+	"544227914190235653301814318281518707344132851054049215257648"
+	"822998553579843623915248343490157688045755609613688354194931"
+	"155095316567258520417716293863465955387522390164888525982287"
+	"381559819702117898832961338716666201201408518828570963323251"
+	"306194210542627378161868636589387165536962353855787777596576"
+	"710978563031098260476460305935557430711516343712631161621638"
+	"424297747566901295718902492493026946182667450323568568598792"
+	"580977411978419195554374077438549283595347906697196389997943"
+	"821127206870116346470443618175766845587246257442257132503411"
+	"376013068217734850145814471463643421637479890664657625208680"
+	"219057665052258447298724802437977073554005025955098694430208"
+	"501653797887431738591455762554777271441730120433837397235427"
+	"441907712019593507034623068852355183288502788155837192039905"
+	"218603255641396097281251518075514455032709185282558744031113"
+	"036987927459621719970870508223603142271888913040204537878014"
+	"097232781406038322711142335237865461173227252915276587188975"
+	"412089017354073518724435949481849511686910608709780211729679"
+	"423063616265710776413272977181193215639813458821362590901377"
+	"135567298928115902833064762050754791470792710944280648419737"
+	"116028237056467689588717464113777074701321446956746031390623"
+	"186305587652731135855965505817801019568850834786532980472935"
+	"789710341720048589915684158676078601107580341029439012576503"
+	"592092659931725826043687968325502279918751241904045306536991"
+	"132342810175996759727172288817628726164341863494412352737198"
+	"699123595406441535867371630213270061740895641891464486421233"
+	"297605134707109520450896967776936045188697002966298943540679"
+	"740957924589270564091461636421609256546506083872345409301831"
+	"931345863636282662528851689413776642426251033843013425169812"
+	"200523043408518309183421120012261021034944354267413735617601"
+	"999466129654555471183928143892048583210218715059190623669673"
+	"709078451184641215598867539008295806531959130171749496348501"
+	"016593279206827788351694604150601776078877850926025938963932"
+	"348257710184608851755301379907626287399864353397924779191438"
+	"696008198450280050868370731345376995801131987106068816254492"
+	"132279657770445691596180800594675207155679408490487848784280"
+	"757840485915053852076328642276460120931365062944412851150517"
+	"782307879807941005366882170554917224788453991203132901742055"
+	"651807985648804532635758643055919919823171907682230888197136"
+	"785695609657776957667650311147598288820442100762328807032871"
+	"864560877230326487537995006393010831208038878617743781275190"
+	"558412003007220219089126636587367218081819059766147691675567"
+	"771585405798025892518183423386642968922615987212237709485258"
+	"829589899034986438444744438813654943661868795407437525228658"
+	"904812581856613986614501454001745869542557985949803493369202"
+	"876231718093372553910516157740346758003125694394951026931617"
+	"535978947861060938131299416911676145021288244119060362036133"
+	"740174212818599501573880189231621521703767197610941072443657"
+	"937938012953869896148787897686753214596234235085019156025250"
+	"458832853791710463651895437666203902547252832579877605247633"
+	"242797093622461108077141606844016196969700713249758804637564"
+	"031033677586166560428898022693846246187767028235072650835679"
+	"508301416234837561554299294212011108379667366726313165151895"
+	"830476329518081413754725734385648977368582850960838417433497"
+	"042248134245755299790357229077513373338430395014449861322941"
+	"839717984951023221186554236475757746380955942423605912965057"
+	"827463769559044175127979722538378699149446690331124179105037"
+	"648851095593259807257640197670861588600691931413564860824819"
+	"137265657381188889377280059698561590053655108304078570914189"
+	"629664137254233685858528515552268875225114223970809842036687"
+	"815258661003059320145462620801188128167207188247801455632725"
+	"082944709186080859531835309805107316387271370578683213373930"
+	"527405724724502485066334073303661751380073478793232637990545"
+	"164168128190593725323015246035847258027356222256980634811669"
+	"852705683168908821634658358608716239406001024947489962630205"
+	"776825692692413107115696006420712968413972191633113557618014"
+	"858696532329910528233723435298914378716968012211255768780932"
+	"309932797977814035171890236317231958304220075777251395064208"
+	"638629746218502848288226858693654802564969763330590748497148"
+	"622346855218718290721826777671881908623480917243090647492727"
+	"942490633210766719088635904655448517979130388109126548929300"
+	"580321560326963512326417012573083178438865633283218615714530"
+	"549903912556636275934676454120536977847927177426272685396804"
+	"919083563678876289503745477768040694051730867535587283818464"
+	"530412086187505017748505307478598856959954962317953251674008"
+	"225476237765489460621328249350656765266995846433809943413102"
+	"353234238035471689081788617703430631377557454803127814187829"
+	"598025185330715074053608155317864680056010785645548139016038"
+	"200546112686635086975287688896283436056884042970495964827912"
+	"025457042506985430699507570505216417703168633373353363740973"
+	"098449441236047555752605169966501252613667375010142836817335"
+	"369229195079966747113425749967668461018275843584570291287076"
+	"863436226900429180382446487600878513931316307565128037734274"
+	"751419683920963106436365962521419345659878831691373235891043"
+	"914494428989096241797873944510540729730313852637867934309362"
+	"479391674181147553437778221885313432295986044940607732570536"
+	"758323465079498284873837903359731801022615162524897452447369"
+	"994156363786660485655244163243106530919921915001572936639717"
+	"727060908959134609147450693915078216074071190796432287614559"
+	"739514565025331782444586046533670722082471368442936376992006"
+	"432871710633235430712641944567318442895146617863508894303083"
+	"780006238593348534997106956499275465539308594895385688351274"
+	"527680872602616209515711522183485689297196476046732023220833"
+	"558806953101747436104574698259485603639631941783303387176618"
+	"127736801688930806971119771946947230290585329044021041830702"
+	"468732853329712319650648310981953139465377229648008743031539"
+	"791012497742669446849787144903264712336696905108788802976454"
+	"745641561589894577319528552887480349967499840509077874630932"
+	"006410787240379373316011071930020626071423345824245404625428"
+	"163528566770284308895812647657178766782096152465077867650878"
+	"728765790031331346983386248864167523818934527230120011631131"
+	"130349221973482282345629720853245305588082152846834757883902"
+	"418230260602977365876291924423262576905967270998981387607980"
+	"590173198728061164566710508280203138579629390853086417284931"
+	"473476503896627076093505113988019224990398993864279520509220"
+	"795282297369154155289507298946591008575807604025045159241768"
+	"053124565959288158472125768546173559933716867523084862590552"
+	"253795464417356834592115317041595395862621956820603128199550"
+	"775483058782397777574710005576429220542135705644683046579361"
+	"127376380818572381345373863156949724560997571282830521596582"
+	"676505338806880191653919681180812814185728172204622753540956"
+	"759118628570582119983330392951985037590913404114720365889373"
+	"415375522713642972968081965998964699854200925870352763511855"
+	"746131244738423217984936240351114193253178508974164557277742"
+	"082380052953358927842394019540795856889426401016424800654084"
+	"916008710304199673856712109217270885934221094921708814309165"
+	"303714869866869718931790902001741107041185283983665265223010"
+	"448886692863436456094906661547207546571718775198778131390005"
+	"604470865710049377159980709766283930814795133660201608803830"
+	"387062687050597694976947517673970085074048905476041868399282"
+	"210210811303996695447225466023628701716954332942062300692087"
+	"506193808715233967409332888561229743938739628873817586345844"
+	"235787382642910048037566676934777493608199400013226603778961"
+	"767983065878179176099437852691381581840415294028487335814184"
+	"359705913795796403022353882329072812841999278936447291852558"
+	"968128572497367407956029126386010516040841218546640263332596"
+	"364434900477374007125240521422713075571772237186443808781395"
+	"704933482403159804140409908423471029408690971564881017253795"
+	"683532592671608458875707405594322989754471498482191627716499"
+	"623059985647863148101198460951644508745146797656322518348570"
+	"790574994392249644280292306896707679268682338936248112446049"
+	"470428346171179377813259652278973223502016593007301073724799"
+	"675658539879152222438587068260743628405812631733705003812107"
+	"928072696169776344782845288646566530062426827248787785754788"
+	"204034823098323378752624648063186410269617045282345847903272"
+	"357883012794129290951171155740484706110733426210921325242247"
+	"031947432945712281996375613115158529796206595654235073113183"
+	"229116768328986688033570396888184706095894900612660127539722"
+	"296354502849429049358053512594493214173703639526633300022260"
+	"539993994939768478780065535050030025336768841935569091193952"
+	"295418769626212992663315977727928629409378094031848746171275"
+	"022638700062740039963954423425449141952878266414881475254943"
+	"495837962606594204955766121034305444739163225756990557510496"
+	"315197857760175019686351370553955868473946854769235600181870"
+	"334652058422826629519051090252418555394822679760154964690633"
+	"135731870251253728441441127894034855357885401169158852255396"
+	"639699288081854756163047653011165173498858844059363317314325"
+	"337992118958275600750342252059241652780147872373128975930272"
+	"695413265811145294182418990017214027985685032786710185135452"
+	"796070710025751232508396762575475070121803068832455179884557"
+	"256396146713354003220173366339787259797424068097390744348497"
+	"133677887754833488593674822145911513312492765863432565891182"
+	"214190046527577994266053060958283589302064055540161380606786"
+	"890667240333781935628676127016516337623222119318995031037529"
+	"409927247355689957774656695089650045891746748411475239883461"
+	"991652532450513429435170431778399974155311268296236254817242"
+	"455320367729822023577459233771570012382302724878339725223236"
+	"524461412308558861938192318706466190317653357172677355284205"
+	"070293717538810250642799918525989427528167652785307564855930"
+	"154693751985406421867359356407962520131591444357266715568677"
+	"627861184481418195428000588444756576764708052752232108761309"
+	"370767116216033888153345559070999007492770805224496576474472"
+	"932991677358644527430624867238990432029754811496885262555308"
+	"156932915411739463731250447922108182182749719224567329572666"
+	"899997017005141127283165797509102920540243864496816399084035"
+	"238460602970884482510943589340905249650626519667989139853813"
+	"647643848628244980589979473423920215951052653309297415539267"
+	"311044820996950448378367138265965725133486376318998624075987"
+	"11389056234111194498836994171142578124e-4952",
+	false,
+	-0x8p-152,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0,
+	false,
+	-0x4p-1076,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0,
+	false,
+	-0x8p-16448,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0,
+	false,
+	-0x4p-16448,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0,
+	false,
+	-0x4p-1076,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0,
+	false,
+	-0x2p-16448,
+	-0x2p-16448,
+	-0x1.fffffffffffcp-16448,
+	-0x1.fffffffffffcp-16448),
+  TEST ("-9.112998829706186506321014834048549540997627039233908359302"
+	"451217570929221583494342023901771564568012993118368368008827"
+	"754917464081555080424933770188974522513709556452944829196423"
+	"063159514083899391553906414958526822350799483883818171478101"
+	"999885432027538796345957615136921788556123238264649295670535"
+	"656555168830888652110170198149384349220565847429757033386660"
+	"529893234530000541906680730080693584097577114013824488797138"
+	"248030638302927908719072846157325088784631875400783211446468"
+	"366417145208372632809262984971759958271469599865806253671506"
+	"148665941467176141059086775605992986647150893920167836194956"
+	"910549340732044378238901342114403169616619771293658127309340"
+	"098781806953539883415240998611008505292633721120054944409011"
+	"094771719058122585292273236376330708886510637541177621277475"
+	"388124237050940437681936303994812073160411682073448062085946"
+	"305372118811154133351132852246337347252699998665212489482352"
+	"167705562919745231565830710334083843075914276516681777540254"
+	"242467271363817040233616963939558863216141676162273217657656"
+	"468904825547982098936715199331001854831676981466460619758131"
+	"504286256279130046834263891194174641007654179652470752555222"
+	"521881010595734530303539396317948868204070581777214986146436"
+	"787584632193988565062001979299954888360379791497508759572055"
+	"500889164919896927727344221023077626909362205236140801210681"
+	"790306995374590904151473988022708942218135581332388074374731"
+	"601376907398595603196240484548455193864763652931369903351174"
+	"544227914190235653301814318281518707344132851054049215257648"
+	"822998553579843623915248343490157688045755609613688354194931"
+	"155095316567258520417716293863465955387522390164888525982287"
+	"381559819702117898832961338716666201201408518828570963323251"
+	"306194210542627378161868636589387165536962353855787777596576"
+	"710978563031098260476460305935557430711516343712631161621638"
+	"424297747566901295718902492493026946182667450323568568598792"
+	"580977411978419195554374077438549283595347906697196389997943"
+	"821127206870116346470443618175766845587246257442257132503411"
+	"376013068217734850145814471463643421637479890664657625208680"
+	"219057665052258447298724802437977073554005025955098694430208"
+	"501653797887431738591455762554777271441730120433837397235427"
+	"441907712019593507034623068852355183288502788155837192039905"
+	"218603255641396097281251518075514455032709185282558744031113"
+	"036987927459621719970870508223603142271888913040204537878014"
+	"097232781406038322711142335237865461173227252915276587188975"
+	"412089017354073518724435949481849511686910608709780211729679"
+	"423063616265710776413272977181193215639813458821362590901377"
+	"135567298928115902833064762050754791470792710944280648419737"
+	"116028237056467689588717464113777074701321446956746031390623"
+	"186305587652731135855965505817801019568850834786532980472935"
+	"789710341720048589915684158676078601107580341029439012576503"
+	"592092659931725826043687968325502279918751241904045306536991"
+	"132342810175996759727172288817628726164341863494412352737198"
+	"699123595406441535867371630213270061740895641891464486421233"
+	"297605134707109520450896967776936045188697002966298943540679"
+	"740957924589270564091461636421609256546506083872345409301831"
+	"931345863636282662528851689413776642426251033843013425169812"
+	"200523043408518309183421120012261021034944354267413735617601"
+	"999466129654555471183928143892048583210218715059190623669673"
+	"709078451184641215598867539008295806531959130171749496348501"
+	"016593279206827788351694604150601776078877850926025938963932"
+	"348257710184608851755301379907626287399864353397924779191438"
+	"696008198450280050868370731345376995801131987106068816254492"
+	"132279657770445691596180800594675207155679408490487848784280"
+	"757840485915053852076328642276460120931365062944412851150517"
+	"782307879807941005366882170554917224788453991203132901742055"
+	"651807985648804532635758643055919919823171907682230888197136"
+	"785695609657776957667650311147598288820442100762328807032871"
+	"864560877230326487537995006393010831208038878617743781275190"
+	"558412003007220219089126636587367218081819059766147691675567"
+	"771585405798025892518183423386642968922615987212237709485258"
+	"829589899034986438444744438813654943661868795407437525228658"
+	"904812581856613986614501454001745869542557985949803493369202"
+	"876231718093372553910516157740346758003125694394951026931617"
+	"535978947861060938131299416911676145021288244119060362036133"
+	"740174212818599501573880189231621521703767197610941072443657"
+	"937938012953869896148787897686753214596234235085019156025250"
+	"458832853791710463651895437666203902547252832579877605247633"
+	"242797093622461108077141606844016196969700713249758804637564"
+	"031033677586166560428898022693846246187767028235072650835679"
+	"508301416234837561554299294212011108379667366726313165151895"
+	"830476329518081413754725734385648977368582850960838417433497"
+	"042248134245755299790357229077513373338430395014449861322941"
+	"839717984951023221186554236475757746380955942423605912965057"
+	"827463769559044175127979722538378699149446690331124179105037"
+	"648851095593259807257640197670861588600691931413564860824819"
+	"137265657381188889377280059698561590053655108304078570914189"
+	"629664137254233685858528515552268875225114223970809842036687"
+	"815258661003059320145462620801188128167207188247801455632725"
+	"082944709186080859531835309805107316387271370578683213373930"
+	"527405724724502485066334073303661751380073478793232637990545"
+	"164168128190593725323015246035847258027356222256980634811669"
+	"852705683168908821634658358608716239406001024947489962630205"
+	"776825692692413107115696006420712968413972191633113557618014"
+	"858696532329910528233723435298914378716968012211255768780932"
+	"309932797977814035171890236317231958304220075777251395064208"
+	"638629746218502848288226858693654802564969763330590748497148"
+	"622346855218718290721826777671881908623480917243090647492727"
+	"942490633210766719088635904655448517979130388109126548929300"
+	"580321560326963512326417012573083178438865633283218615714530"
+	"549903912556636275934676454120536977847927177426272685396804"
+	"919083563678876289503745477768040694051730867535587283818464"
+	"530412086187505017748505307478598856959954962317953251674008"
+	"225476237765489460621328249350656765266995846433809943413102"
+	"353234238035471689081788617703430631377557454803127814187829"
+	"598025185330715074053608155317864680056010785645548139016038"
+	"200546112686635086975287688896283436056884042970495964827912"
+	"025457042506985430699507570505216417703168633373353363740973"
+	"098449441236047555752605169966501252613667375010142836817335"
+	"369229195079966747113425749967668461018275843584570291287076"
+	"863436226900429180382446487600878513931316307565128037734274"
+	"751419683920963106436365962521419345659878831691373235891043"
+	"914494428989096241797873944510540729730313852637867934309362"
+	"479391674181147553437778221885313432295986044940607732570536"
+	"758323465079498284873837903359731801022615162524897452447369"
+	"994156363786660485655244163243106530919921915001572936639717"
+	"727060908959134609147450693915078216074071190796432287614559"
+	"739514565025331782444586046533670722082471368442936376992006"
+	"432871710633235430712641944567318442895146617863508894303083"
+	"780006238593348534997106956499275465539308594895385688351274"
+	"527680872602616209515711522183485689297196476046732023220833"
+	"558806953101747436104574698259485603639631941783303387176618"
+	"127736801688930806971119771946947230290585329044021041830702"
+	"468732853329712319650648310981953139465377229648008743031539"
+	"791012497742669446849787144903264712336696905108788802976454"
+	"745641561589894577319528552887480349967499840509077874630932"
+	"006410787240379373316011071930020626071423345824245404625428"
+	"163528566770284308895812647657178766782096152465077867650878"
+	"728765790031331346983386248864167523818934527230120011631131"
+	"130349221973482282345629720853245305588082152846834757883902"
+	"418230260602977365876291924423262576905967270998981387607980"
+	"590173198728061164566710508280203138579629390853086417284931"
+	"473476503896627076093505113988019224990398993864279520509220"
+	"795282297369154155289507298946591008575807604025045159241768"
+	"053124565959288158472125768546173559933716867523084862590552"
+	"253795464417356834592115317041595395862621956820603128199550"
+	"775483058782397777574710005576429220542135705644683046579361"
+	"127376380818572381345373863156949724560997571282830521596582"
+	"676505338806880191653919681180812814185728172204622753540956"
+	"759118628570582119983330392951985037590913404114720365889373"
+	"415375522713642972968081965998964699854200925870352763511855"
+	"746131244738423217984936240351114193253178508974164557277742"
+	"082380052953358927842394019540795856889426401016424800654084"
+	"916008710304199673856712109217270885934221094921708814309165"
+	"303714869866869718931790902001741107041185283983665265223010"
+	"448886692863436456094906661547207546571718775198778131390005"
+	"604470865710049377159980709766283930814795133660201608803830"
+	"387062687050597694976947517673970085074048905476041868399282"
+	"210210811303996695447225466023628701716954332942062300692087"
+	"506193808715233967409332888561229743938739628873817586345844"
+	"235787382642910048037566676934777493608199400013226603778961"
+	"767983065878179176099437852691381581840415294028487335814184"
+	"359705913795796403022353882329072812841999278936447291852558"
+	"968128572497367407956029126386010516040841218546640263332596"
+	"364434900477374007125240521422713075571772237186443808781395"
+	"704933482403159804140409908423471029408690971564881017253795"
+	"683532592671608458875707405594322989754471498482191627716499"
+	"623059985647863148101198460951644508745146797656322518348570"
+	"790574994392249644280292306896707679268682338936248112446049"
+	"470428346171179377813259652278973223502016593007301073724799"
+	"675658539879152222438587068260743628405812631733705003812107"
+	"928072696169776344782845288646566530062426827248787785754788"
+	"204034823098323378752624648063186410269617045282345847903272"
+	"357883012794129290951171155740484706110733426210921325242247"
+	"031947432945712281996375613115158529796206595654235073113183"
+	"229116768328986688033570396888184706095894900612660127539722"
+	"296354502849429049358053512594493214173703639526633300022260"
+	"539993994939768478780065535050030025336768841935569091193952"
+	"295418769626212992663315977727928629409378094031848746171275"
+	"022638700062740039963954423425449141952878266414881475254943"
+	"495837962606594204955766121034305444739163225756990557510496"
+	"315197857760175019686351370553955868473946854769235600181870"
+	"334652058422826629519051090252418555394822679760154964690633"
+	"135731870251253728441441127894034855357885401169158852255396"
+	"639699288081854756163047653011165173498858844059363317314325"
+	"337992118958275600750342252059241652780147872373128975930272"
+	"695413265811145294182418990017214027985685032786710185135452"
+	"796070710025751232508396762575475070121803068832455179884557"
+	"256396146713354003220173366339787259797424068097390744348497"
+	"133677887754833488593674822145911513312492765863432565891182"
+	"214190046527577994266053060958283589302064055540161380606786"
+	"890667240333781935628676127016516337623222119318995031037529"
+	"409927247355689957774656695089650045891746748411475239883461"
+	"991652532450513429435170431778399974155311268296236254817242"
+	"455320367729822023577459233771570012382302724878339725223236"
+	"524461412308558861938192318706466190317653357172677355284205"
+	"070293717538810250642799918525989427528167652785307564855930"
+	"154693751985406421867359356407962520131591444357266715568677"
+	"627861184481418195428000588444756576764708052752232108761309"
+	"370767116216033888153345559070999007492770805224496576474472"
+	"932991677358644527430624867238990432029754811496885262555308"
+	"156932915411739463731250447922108182182749719224567329572666"
+	"899997017005141127283165797509102920540243864496816399084035"
+	"238460602970884482510943589340905249650626519667989139853813"
+	"647643848628244980589979473423920215951052653309297415539267"
+	"311044820996950448378367138265965725133486376318998624075987"
+	"11389056234111194498836994171142578125e-4952",
+	false,
+	-0x8p-152,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0,
+	false,
+	-0x4p-1076,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0,
+	false,
+	-0x8p-16448,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0,
+	false,
+	-0x4p-16448,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0,
+	false,
+	-0x4p-1076,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0,
+	true,
+	-0x2p-16448,
+	-0x2p-16448,
+	-0x2p-16448,
+	-0x2p-16448),
+  TEST ("-9.112998829706186506321014834048549540997627039233908359302"
+	"451217570929221583494342023901771564568012993118368368008827"
+	"754917464081555080424933770188974522513709556452944829196423"
+	"063159514083899391553906414958526822350799483883818171478101"
+	"999885432027538796345957615136921788556123238264649295670535"
+	"656555168830888652110170198149384349220565847429757033386660"
+	"529893234530000541906680730080693584097577114013824488797138"
+	"248030638302927908719072846157325088784631875400783211446468"
+	"366417145208372632809262984971759958271469599865806253671506"
+	"148665941467176141059086775605992986647150893920167836194956"
+	"910549340732044378238901342114403169616619771293658127309340"
+	"098781806953539883415240998611008505292633721120054944409011"
+	"094771719058122585292273236376330708886510637541177621277475"
+	"388124237050940437681936303994812073160411682073448062085946"
+	"305372118811154133351132852246337347252699998665212489482352"
+	"167705562919745231565830710334083843075914276516681777540254"
+	"242467271363817040233616963939558863216141676162273217657656"
+	"468904825547982098936715199331001854831676981466460619758131"
+	"504286256279130046834263891194174641007654179652470752555222"
+	"521881010595734530303539396317948868204070581777214986146436"
+	"787584632193988565062001979299954888360379791497508759572055"
+	"500889164919896927727344221023077626909362205236140801210681"
+	"790306995374590904151473988022708942218135581332388074374731"
+	"601376907398595603196240484548455193864763652931369903351174"
+	"544227914190235653301814318281518707344132851054049215257648"
+	"822998553579843623915248343490157688045755609613688354194931"
+	"155095316567258520417716293863465955387522390164888525982287"
+	"381559819702117898832961338716666201201408518828570963323251"
+	"306194210542627378161868636589387165536962353855787777596576"
+	"710978563031098260476460305935557430711516343712631161621638"
+	"424297747566901295718902492493026946182667450323568568598792"
+	"580977411978419195554374077438549283595347906697196389997943"
+	"821127206870116346470443618175766845587246257442257132503411"
+	"376013068217734850145814471463643421637479890664657625208680"
+	"219057665052258447298724802437977073554005025955098694430208"
+	"501653797887431738591455762554777271441730120433837397235427"
+	"441907712019593507034623068852355183288502788155837192039905"
+	"218603255641396097281251518075514455032709185282558744031113"
+	"036987927459621719970870508223603142271888913040204537878014"
+	"097232781406038322711142335237865461173227252915276587188975"
+	"412089017354073518724435949481849511686910608709780211729679"
+	"423063616265710776413272977181193215639813458821362590901377"
+	"135567298928115902833064762050754791470792710944280648419737"
+	"116028237056467689588717464113777074701321446956746031390623"
+	"186305587652731135855965505817801019568850834786532980472935"
+	"789710341720048589915684158676078601107580341029439012576503"
+	"592092659931725826043687968325502279918751241904045306536991"
+	"132342810175996759727172288817628726164341863494412352737198"
+	"699123595406441535867371630213270061740895641891464486421233"
+	"297605134707109520450896967776936045188697002966298943540679"
+	"740957924589270564091461636421609256546506083872345409301831"
+	"931345863636282662528851689413776642426251033843013425169812"
+	"200523043408518309183421120012261021034944354267413735617601"
+	"999466129654555471183928143892048583210218715059190623669673"
+	"709078451184641215598867539008295806531959130171749496348501"
+	"016593279206827788351694604150601776078877850926025938963932"
+	"348257710184608851755301379907626287399864353397924779191438"
+	"696008198450280050868370731345376995801131987106068816254492"
+	"132279657770445691596180800594675207155679408490487848784280"
+	"757840485915053852076328642276460120931365062944412851150517"
+	"782307879807941005366882170554917224788453991203132901742055"
+	"651807985648804532635758643055919919823171907682230888197136"
+	"785695609657776957667650311147598288820442100762328807032871"
+	"864560877230326487537995006393010831208038878617743781275190"
+	"558412003007220219089126636587367218081819059766147691675567"
+	"771585405798025892518183423386642968922615987212237709485258"
+	"829589899034986438444744438813654943661868795407437525228658"
+	"904812581856613986614501454001745869542557985949803493369202"
+	"876231718093372553910516157740346758003125694394951026931617"
+	"535978947861060938131299416911676145021288244119060362036133"
+	"740174212818599501573880189231621521703767197610941072443657"
+	"937938012953869896148787897686753214596234235085019156025250"
+	"458832853791710463651895437666203902547252832579877605247633"
+	"242797093622461108077141606844016196969700713249758804637564"
+	"031033677586166560428898022693846246187767028235072650835679"
+	"508301416234837561554299294212011108379667366726313165151895"
+	"830476329518081413754725734385648977368582850960838417433497"
+	"042248134245755299790357229077513373338430395014449861322941"
+	"839717984951023221186554236475757746380955942423605912965057"
+	"827463769559044175127979722538378699149446690331124179105037"
+	"648851095593259807257640197670861588600691931413564860824819"
+	"137265657381188889377280059698561590053655108304078570914189"
+	"629664137254233685858528515552268875225114223970809842036687"
+	"815258661003059320145462620801188128167207188247801455632725"
+	"082944709186080859531835309805107316387271370578683213373930"
+	"527405724724502485066334073303661751380073478793232637990545"
+	"164168128190593725323015246035847258027356222256980634811669"
+	"852705683168908821634658358608716239406001024947489962630205"
+	"776825692692413107115696006420712968413972191633113557618014"
+	"858696532329910528233723435298914378716968012211255768780932"
+	"309932797977814035171890236317231958304220075777251395064208"
+	"638629746218502848288226858693654802564969763330590748497148"
+	"622346855218718290721826777671881908623480917243090647492727"
+	"942490633210766719088635904655448517979130388109126548929300"
+	"580321560326963512326417012573083178438865633283218615714530"
+	"549903912556636275934676454120536977847927177426272685396804"
+	"919083563678876289503745477768040694051730867535587283818464"
+	"530412086187505017748505307478598856959954962317953251674008"
+	"225476237765489460621328249350656765266995846433809943413102"
+	"353234238035471689081788617703430631377557454803127814187829"
+	"598025185330715074053608155317864680056010785645548139016038"
+	"200546112686635086975287688896283436056884042970495964827912"
+	"025457042506985430699507570505216417703168633373353363740973"
+	"098449441236047555752605169966501252613667375010142836817335"
+	"369229195079966747113425749967668461018275843584570291287076"
+	"863436226900429180382446487600878513931316307565128037734274"
+	"751419683920963106436365962521419345659878831691373235891043"
+	"914494428989096241797873944510540729730313852637867934309362"
+	"479391674181147553437778221885313432295986044940607732570536"
+	"758323465079498284873837903359731801022615162524897452447369"
+	"994156363786660485655244163243106530919921915001572936639717"
+	"727060908959134609147450693915078216074071190796432287614559"
+	"739514565025331782444586046533670722082471368442936376992006"
+	"432871710633235430712641944567318442895146617863508894303083"
+	"780006238593348534997106956499275465539308594895385688351274"
+	"527680872602616209515711522183485689297196476046732023220833"
+	"558806953101747436104574698259485603639631941783303387176618"
+	"127736801688930806971119771946947230290585329044021041830702"
+	"468732853329712319650648310981953139465377229648008743031539"
+	"791012497742669446849787144903264712336696905108788802976454"
+	"745641561589894577319528552887480349967499840509077874630932"
+	"006410787240379373316011071930020626071423345824245404625428"
+	"163528566770284308895812647657178766782096152465077867650878"
+	"728765790031331346983386248864167523818934527230120011631131"
+	"130349221973482282345629720853245305588082152846834757883902"
+	"418230260602977365876291924423262576905967270998981387607980"
+	"590173198728061164566710508280203138579629390853086417284931"
+	"473476503896627076093505113988019224990398993864279520509220"
+	"795282297369154155289507298946591008575807604025045159241768"
+	"053124565959288158472125768546173559933716867523084862590552"
+	"253795464417356834592115317041595395862621956820603128199550"
+	"775483058782397777574710005576429220542135705644683046579361"
+	"127376380818572381345373863156949724560997571282830521596582"
+	"676505338806880191653919681180812814185728172204622753540956"
+	"759118628570582119983330392951985037590913404114720365889373"
+	"415375522713642972968081965998964699854200925870352763511855"
+	"746131244738423217984936240351114193253178508974164557277742"
+	"082380052953358927842394019540795856889426401016424800654084"
+	"916008710304199673856712109217270885934221094921708814309165"
+	"303714869866869718931790902001741107041185283983665265223010"
+	"448886692863436456094906661547207546571718775198778131390005"
+	"604470865710049377159980709766283930814795133660201608803830"
+	"387062687050597694976947517673970085074048905476041868399282"
+	"210210811303996695447225466023628701716954332942062300692087"
+	"506193808715233967409332888561229743938739628873817586345844"
+	"235787382642910048037566676934777493608199400013226603778961"
+	"767983065878179176099437852691381581840415294028487335814184"
+	"359705913795796403022353882329072812841999278936447291852558"
+	"968128572497367407956029126386010516040841218546640263332596"
+	"364434900477374007125240521422713075571772237186443808781395"
+	"704933482403159804140409908423471029408690971564881017253795"
+	"683532592671608458875707405594322989754471498482191627716499"
+	"623059985647863148101198460951644508745146797656322518348570"
+	"790574994392249644280292306896707679268682338936248112446049"
+	"470428346171179377813259652278973223502016593007301073724799"
+	"675658539879152222438587068260743628405812631733705003812107"
+	"928072696169776344782845288646566530062426827248787785754788"
+	"204034823098323378752624648063186410269617045282345847903272"
+	"357883012794129290951171155740484706110733426210921325242247"
+	"031947432945712281996375613115158529796206595654235073113183"
+	"229116768328986688033570396888184706095894900612660127539722"
+	"296354502849429049358053512594493214173703639526633300022260"
+	"539993994939768478780065535050030025336768841935569091193952"
+	"295418769626212992663315977727928629409378094031848746171275"
+	"022638700062740039963954423425449141952878266414881475254943"
+	"495837962606594204955766121034305444739163225756990557510496"
+	"315197857760175019686351370553955868473946854769235600181870"
+	"334652058422826629519051090252418555394822679760154964690633"
+	"135731870251253728441441127894034855357885401169158852255396"
+	"639699288081854756163047653011165173498858844059363317314325"
+	"337992118958275600750342252059241652780147872373128975930272"
+	"695413265811145294182418990017214027985685032786710185135452"
+	"796070710025751232508396762575475070121803068832455179884557"
+	"256396146713354003220173366339787259797424068097390744348497"
+	"133677887754833488593674822145911513312492765863432565891182"
+	"214190046527577994266053060958283589302064055540161380606786"
+	"890667240333781935628676127016516337623222119318995031037529"
+	"409927247355689957774656695089650045891746748411475239883461"
+	"991652532450513429435170431778399974155311268296236254817242"
+	"455320367729822023577459233771570012382302724878339725223236"
+	"524461412308558861938192318706466190317653357172677355284205"
+	"070293717538810250642799918525989427528167652785307564855930"
+	"154693751985406421867359356407962520131591444357266715568677"
+	"627861184481418195428000588444756576764708052752232108761309"
+	"370767116216033888153345559070999007492770805224496576474472"
+	"932991677358644527430624867238990432029754811496885262555308"
+	"156932915411739463731250447922108182182749719224567329572666"
+	"899997017005141127283165797509102920540243864496816399084035"
+	"238460602970884482510943589340905249650626519667989139853813"
+	"647643848628244980589979473423920215951052653309297415539267"
+	"311044820996950448378367138265965725133486376318998624075987"
+	"11389056234111194498836994171142578126e-4952",
+	false,
+	-0x8p-152,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0,
+	false,
+	-0x4p-1076,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0,
+	false,
+	-0x8p-16448,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0,
+	false,
+	-0x4p-16448,
+	-0x4p-16448,
+	-0x0p+0,
+	-0x0p+0,
+	false,
+	-0x4p-1076,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0,
+	false,
+	-0x2.000000000004p-16448,
+	-0x2p-16448,
+	-0x2p-16448,
+	-0x2p-16448),
+  TEST ("3.2375875597190125554622194791138232762497846690173405048449"
+	"421945985197700620596855088357456383249701279390707384240598"
+	"382936099431912710233425550359863089915213963553756674672083"
+	"673128192358701197242632527769951957277781260855740340354110"
+	"173441284912381364143945515141786687806740155311932822963199"
+	"131134959539539338316310328556057915323285980341541664226172"
+	"265348802632447238304822896568757017013159021750199744350376"
+	"278243566840330589397015778833566517337174685312047058426075"
+	"688036665697114219175258344917835835984013214761767520398571"
+	"735519302688914468501077605843338555214753050109407568139932"
+	"147308502166696009676987494125921676927574464221699654264839"
+	"192243410627511520570610765229732327315423820550872393685221"
+	"676561948307418196052769717057382723931306989375320957256133"
+	"838073129463951849807075348034900035402513943244599879584009"
+	"391110011261908615236154859382854977144106096407982738165117"
+	"693915685918231984764157652755343417097983676870433731452629"
+	"339981084526616826599425863049784138127555181662391766144738"
+	"159400253422795753041594932607700680306368857466952063923782"
+	"760519487592638820793893796669403574411398166619131986561877"
+	"034635197232626532239192571857518274939275861531537920777299"
+	"133535479548088762634002006634954143608168633852204577195463"
+	"389533233992867620995583241321034602255800668175356808869060"
+	"608582640890741203603916133682748118680676374951545690715916"
+	"241859799379894025137504643469040366684778763795442214328000"
+	"375999444991619403217748350277527106812175542863660436614910"
+	"135938862296156144947361864759321605496309393905421651264941"
+	"669606814994816518612155298709843817262034769175075602668866"
+	"926449523554218142013501373514352370369126244144449924971423"
+	"038024236058971106053649565799145071085840022305247663313482"
+	"714565918140785997808209749619683146844964283106915422726638"
+	"184861327711776708749278315100024436584176080783836115268999"
+	"055336294569042349971163039294272620322160728879610722678506"
+	"182344928526064885227397447578450046944618127903428943538029"
+	"386719288345854473283987116842451647036255801966780244103035"
+	"425445345127067921349083698736056197567752071915587544133815"
+	"717564310032485290205726480489464589999677885266171263493459"
+	"668963623768410922688414177814149693150024191921819721215688"
+	"114324591287371281400636455584825253000890602388603923710921"
+	"026880979879158388608823700222683123228822356907857261909150"
+	"626993825760416437415551396973489279578569909699853422995997"
+	"974315036153120383930698087773157253674975950409660938084071"
+	"173163693891122166282318691732176374528554627905530306369204"
+	"877964658806333996327938827344733821685425961846791581492287"
+	"250044047142934607523718654369478552373072400018635730811749"
+	"291666457582760812726851561001954207941547404866373158231367"
+	"986951247388733285659455982411993350593989550494594498447410"
+	"984783303191128659803467713819821511544998464785455306500918"
+	"241648925913966507036336000231915215026183799886938007038845"
+	"551916478649593272604688927931953165785101738164060543643192"
+	"949066412847647883846835866623820426428526541564774787007791"
+	"235843699657232847114093617412355486871810526396392792853731"
+	"390841657984518997639795008374280777823099107035223998600103"
+	"103211166230289241182380237703814248941627178152962100972452"
+	"217697144954497443279450919433943252592977710901289696002698"
+	"225209041938801190947812141758873162203113090284565687499100"
+	"109623665868340184032428667217835198069330185880779776269137"
+	"742366802202585247113480377505916462865316253065105837519292"
+	"805411191872195967066157363040364443666632564266439033866945"
+	"366496486863801221986778957510023272290593640187551645170603"
+	"215150911733580059874983597994671388176488814794186236946834"
+	"548816837468411497151813344980969677026131105901402313456769"
+	"561412278508799050185582199844418197980544632067644131002512"
+	"557755358307705356209461595354064971347590431926479961905129"
+	"785864961996560707071051177738535042777950247546470241655891"
+	"294428226271478689174637951663865529219133988782700199051475"
+	"108495188941141025360733690471601309904116260484264378352956"
+	"830972782977747351810451586166745640802378131466232692150196"
+	"132319386267589275314909450293562079332893638471814389025392"
+	"970579695249613486078445695214422379148991006996109216699215"
+	"721671648754881325271879493185438097033881789311707997697928"
+	"860866812849648616086569281093053695399558469641977866770538"
+	"476039621947215238679930485285585513808236992918733520331110"
+	"962448142457896209307561142289713638388281085340301520317159"
+	"297224995464365477734040179470355969363384621039467975256670"
+	"339354334892926205316491997244008324897517881293654265688813"
+	"283579663372924392043825371743576754041055802440187836850412"
+	"247984570221893156921757872572872036331343007592090605703195"
+	"088864753777199111760713027328198781654685927174063882187275"
+	"850263521274368447629947228263907797373221137688424821608129"
+	"731003236738630502344377228987961455961818623205503012858619"
+	"800521948637807438081069469400793496307826769301971342062597"
+	"391253779410607511754278887744936774785938056823221738917303"
+	"119592848951788560393540150358649310736020595310015728915288"
+	"289821678102453433273888879288862086153270028346900686360943"
+	"250522514297816412678213672667152836436597491522644579383191"
+	"851483036048273636234050603745735057899230038434384361744893"
+	"838050985090837220507663282503497932038372021626246900935334"
+	"781144388106031405650705176699646299475436084049881780196520"
+	"881623075256119318210664937469946410480660118598143375898298"
+	"965497205621170906772915413181530577151676241283182977713765"
+	"317889730886996471681592298058774155948285325398399674640645"
+	"566475947058303746531133735308766583802401453804232106737787"
+	"768035926272312574958173945816077962772826443125107145322971"
+	"087220172175473177449006473180221085709470643042801004189714"
+	"505520073568915195232936144169440163547568663500508335014169"
+	"425050712038101167190534305435310279534374364467455668392421"
+	"298604104431988622194699721632249712583483143417550152131186"
+	"288827131347662976240916448058011869761525369135147129192405"
+	"037216807405860168320999468074663117771890506566769628495813"
+	"837909047220874786467663205170561835819702362482274133227483"
+	"041342457179876653773960112367066273208176545656826800069574"
+	"547599816180234764485446735080683694920665668954370505715843"
+	"455110709594838989387382250502925336743830916124954071268053"
+	"817964873658921319164268375226716232666274830656557657055342"
+	"393552148933959057023293404027940528842591460490646295820755"
+	"765633076707491896621769767253619370462005760078938144396953"
+	"018925287611875441613896820035092167912718365454954166761481"
+	"511451950826683236776211829914518353242818636196417736206010"
+	"145109509967467266157037719712666871515644277723594273405669"
+	"093518586548079997818085130346801040781966074621669280188633"
+	"856299289656492439545033914935979634179552686396067914528336"
+	"924678729357419403624798426886422277256625046946795576781709"
+	"298737741510378578072199383561520569978396254537274419476511"
+	"983161908266152660163477408756159700314280122283281906103567"
+	"067156627222418787671312246698375736071215395722993294041012"
+	"744631560602983489316782773611740570974847045870362276861106"
+	"774130949410119612624380274679529647271294627526939490197641"
+	"645383447755544661714281218489998189691140343327976729279891"
+	"077101372792811842951182338559423852563331641533781432796742"
+	"873181364582071661749961126386895359760476172215209100274274"
+	"851619657020388051618654944574445941780637669570374280535432"
+	"399157923698778110534174856844986671232161320063786308144771"
+	"068130888985636449091787794632959555876880672773686838364706"
+	"122084832995722603440165161942472322987408003421165899848443"
+	"566885769845535074102932500939450142098799833145629484519298"
+	"622410092757836842296697186410137365818568152771850732591405"
+	"340248509247875448717161746544246407280913725135059228268131"
+	"453903691495906528862410006254958805237716723952273129715780"
+	"425223305517882562616830806755498203755676925741529569939445"
+	"043490046171854709456730491532189688306135861932534903184518"
+	"717706426178028900836080044604143054210332610482947502104703"
+	"032028463320549525316174330585387581543470878545616097381416"
+	"151451037487775797335749896735101048367502483255117772375025"
+	"269956476872153642623856062175536913321594213515989059505375"
+	"135183515207096576145781316398544325320022366962008554087665"
+	"201050763789833457082359181807492731245904330245198691471329"
+	"319324627030678762142685799400660305214140453863665517807185"
+	"105354694177602424937823924511789133225030926924236498557565"
+	"212794565582753399214908928688568628950225640472058381324292"
+	"866007645368390366981937596341868992912741319342960598330486"
+	"905946276235953206760977215407164729909506118583728562718724"
+	"235732515062300426080741679038098122641980345051854359908213"
+	"563779664847422505775922437272989231878912994048540484468227"
+	"199282393172540734295329890896755037903724644870572648941076"
+	"132423009124870700536763793881894969000042397318202298868940"
+	"530196108237639578098191879486398269734335286831689173606327"
+	"500405178476864790935386838169242131756729797688220656276969"
+	"434749140204830563840068728357383111109865861495106613619153"
+	"421725274090787422508800568671498311491210197298472420373359"
+	"044400631309819996507004167876832936101195902219429743174557"
+	"163362274547892397934880322990633165889175059124060202200452"
+	"648684577182821651588921716304707095995039972827781680978274"
+	"973838841958209215836456212939412000456040621743349981715350"
+	"305133662772937143899882197561295808685181679238411733642697"
+	"748892466944352640514849114619882270112386610376024527101889"
+	"119004382703622803911212700216792471528793241950356942780714"
+	"774957204475130171711488773121937363663487116301055073658645"
+	"980695862570269762957141239436916216723776945522480189876803"
+	"386123827956059851911061129713987960026363403936931196519733"
+	"447116468545744829997003979525368783485129837821983305137448"
+	"031689360764270759437872004895754351479890333865299565515706"
+	"690471030702230767978923298480584997256328135245813726407464"
+	"159230169328539541524724878662873185450510653764301207480799"
+	"488602832618557388369552461881286225098286358672257087829660"
+	"174231705350465091313887538950130611513878400895128618426154"
+	"417299623157313010877679890009181366178705821415173309356192"
+	"686429159835537275875876767919535369607142366878476025895389"
+	"279625854409611312402187942369446302119309705461187450803468"
+	"606366203101933821675974655441744883993796837164178911391575"
+	"751463591650231265941242686108002052587760190005508737394014"
+	"453031299745602214380618917954427803281262300931789525045703"
+	"809571995929933387196864877982754748535701000330924817431298"
+	"365273697561943437891318220691072831562717726798635382168915"
+	"187137325209768346284183473712613689334546294053718697897526"
+	"843398053681374508250012035211936425982389543291022583173280"
+	"985811169783438836113209408147936547458073361625570571955232"
+	"746103236016857123149307991441916732438322836596693687161268"
+	"151183603534413030099360835441935243365729307681545065674775"
+	"655582111435085683962037818795920337874290127531069511296530"
+	"746308404963763022896682861683252995925040540038039172626001"
+	"958340013361801588367655990575379797454237110701588716509764"
+	"759243657077584013289594787913434812509790293636440469725564"
+	"222946985585616708175959944099853232059130350099233608207347"
+	"955460820122006976717445739825352919058005528371183277021250"
+	"186916447745609162301667393077050176560656798672598371789181"
+	"232542195795945358691713761483976100058707499929103557275695"
+	"937295677892604799308353051124627278706035295473126217205599"
+	"530746756205492173148619619059839609108464715691924592576481"
+	"382126740168148453274964955074129767533813576349605298268179"
+	"068244338581354855186516322703199278802275718580352103754433"
+	"240982354636196477238624205575823556321375833700666021556412"
+	"182358152808745703724362178773168996492870519432472065091133"
+	"11767578124e-4966",
+	false,
+	0x0p+0,
+	0x0p+0,
+	0x0p+0,
+	0x8p-152,
+	false,
+	0x0p+0,
+	0x0p+0,
+	0x0p+0,
+	0x4p-1076,
+	false,
+	0x0p+0,
+	0x0p+0,
+	0x0p+0,
+	0x8p-16448,
+	false,
+	0x0p+0,
+	0x0p+0,
+	0x0p+0,
+	0x4p-16448,
+	false,
+	0x0p+0,
+	0x0p+0,
+	0x0p+0,
+	0x4p-1076,
+	false,
+	0x0p+0,
+	0x0p+0,
+	0x0p+0,
+	0x4p-16496),
+  TEST ("3.2375875597190125554622194791138232762497846690173405048449"
+	"421945985197700620596855088357456383249701279390707384240598"
+	"382936099431912710233425550359863089915213963553756674672083"
+	"673128192358701197242632527769951957277781260855740340354110"
+	"173441284912381364143945515141786687806740155311932822963199"
+	"131134959539539338316310328556057915323285980341541664226172"
+	"265348802632447238304822896568757017013159021750199744350376"
+	"278243566840330589397015778833566517337174685312047058426075"
+	"688036665697114219175258344917835835984013214761767520398571"
+	"735519302688914468501077605843338555214753050109407568139932"
+	"147308502166696009676987494125921676927574464221699654264839"
+	"192243410627511520570610765229732327315423820550872393685221"
+	"676561948307418196052769717057382723931306989375320957256133"
+	"838073129463951849807075348034900035402513943244599879584009"
+	"391110011261908615236154859382854977144106096407982738165117"
+	"693915685918231984764157652755343417097983676870433731452629"
+	"339981084526616826599425863049784138127555181662391766144738"
+	"159400253422795753041594932607700680306368857466952063923782"
+	"760519487592638820793893796669403574411398166619131986561877"
+	"034635197232626532239192571857518274939275861531537920777299"
+	"133535479548088762634002006634954143608168633852204577195463"
+	"389533233992867620995583241321034602255800668175356808869060"
+	"608582640890741203603916133682748118680676374951545690715916"
+	"241859799379894025137504643469040366684778763795442214328000"
+	"375999444991619403217748350277527106812175542863660436614910"
+	"135938862296156144947361864759321605496309393905421651264941"
+	"669606814994816518612155298709843817262034769175075602668866"
+	"926449523554218142013501373514352370369126244144449924971423"
+	"038024236058971106053649565799145071085840022305247663313482"
+	"714565918140785997808209749619683146844964283106915422726638"
+	"184861327711776708749278315100024436584176080783836115268999"
+	"055336294569042349971163039294272620322160728879610722678506"
+	"182344928526064885227397447578450046944618127903428943538029"
+	"386719288345854473283987116842451647036255801966780244103035"
+	"425445345127067921349083698736056197567752071915587544133815"
+	"717564310032485290205726480489464589999677885266171263493459"
+	"668963623768410922688414177814149693150024191921819721215688"
+	"114324591287371281400636455584825253000890602388603923710921"
+	"026880979879158388608823700222683123228822356907857261909150"
+	"626993825760416437415551396973489279578569909699853422995997"
+	"974315036153120383930698087773157253674975950409660938084071"
+	"173163693891122166282318691732176374528554627905530306369204"
+	"877964658806333996327938827344733821685425961846791581492287"
+	"250044047142934607523718654369478552373072400018635730811749"
+	"291666457582760812726851561001954207941547404866373158231367"
+	"986951247388733285659455982411993350593989550494594498447410"
+	"984783303191128659803467713819821511544998464785455306500918"
+	"241648925913966507036336000231915215026183799886938007038845"
+	"551916478649593272604688927931953165785101738164060543643192"
+	"949066412847647883846835866623820426428526541564774787007791"
+	"235843699657232847114093617412355486871810526396392792853731"
+	"390841657984518997639795008374280777823099107035223998600103"
+	"103211166230289241182380237703814248941627178152962100972452"
+	"217697144954497443279450919433943252592977710901289696002698"
+	"225209041938801190947812141758873162203113090284565687499100"
+	"109623665868340184032428667217835198069330185880779776269137"
+	"742366802202585247113480377505916462865316253065105837519292"
+	"805411191872195967066157363040364443666632564266439033866945"
+	"366496486863801221986778957510023272290593640187551645170603"
+	"215150911733580059874983597994671388176488814794186236946834"
+	"548816837468411497151813344980969677026131105901402313456769"
+	"561412278508799050185582199844418197980544632067644131002512"
+	"557755358307705356209461595354064971347590431926479961905129"
+	"785864961996560707071051177738535042777950247546470241655891"
+	"294428226271478689174637951663865529219133988782700199051475"
+	"108495188941141025360733690471601309904116260484264378352956"
+	"830972782977747351810451586166745640802378131466232692150196"
+	"132319386267589275314909450293562079332893638471814389025392"
+	"970579695249613486078445695214422379148991006996109216699215"
+	"721671648754881325271879493185438097033881789311707997697928"
+	"860866812849648616086569281093053695399558469641977866770538"
+	"476039621947215238679930485285585513808236992918733520331110"
+	"962448142457896209307561142289713638388281085340301520317159"
+	"297224995464365477734040179470355969363384621039467975256670"
+	"339354334892926205316491997244008324897517881293654265688813"
+	"283579663372924392043825371743576754041055802440187836850412"
+	"247984570221893156921757872572872036331343007592090605703195"
+	"088864753777199111760713027328198781654685927174063882187275"
+	"850263521274368447629947228263907797373221137688424821608129"
+	"731003236738630502344377228987961455961818623205503012858619"
+	"800521948637807438081069469400793496307826769301971342062597"
+	"391253779410607511754278887744936774785938056823221738917303"
+	"119592848951788560393540150358649310736020595310015728915288"
+	"289821678102453433273888879288862086153270028346900686360943"
+	"250522514297816412678213672667152836436597491522644579383191"
+	"851483036048273636234050603745735057899230038434384361744893"
+	"838050985090837220507663282503497932038372021626246900935334"
+	"781144388106031405650705176699646299475436084049881780196520"
+	"881623075256119318210664937469946410480660118598143375898298"
+	"965497205621170906772915413181530577151676241283182977713765"
+	"317889730886996471681592298058774155948285325398399674640645"
+	"566475947058303746531133735308766583802401453804232106737787"
+	"768035926272312574958173945816077962772826443125107145322971"
+	"087220172175473177449006473180221085709470643042801004189714"
+	"505520073568915195232936144169440163547568663500508335014169"
+	"425050712038101167190534305435310279534374364467455668392421"
+	"298604104431988622194699721632249712583483143417550152131186"
+	"288827131347662976240916448058011869761525369135147129192405"
+	"037216807405860168320999468074663117771890506566769628495813"
+	"837909047220874786467663205170561835819702362482274133227483"
+	"041342457179876653773960112367066273208176545656826800069574"
+	"547599816180234764485446735080683694920665668954370505715843"
+	"455110709594838989387382250502925336743830916124954071268053"
+	"817964873658921319164268375226716232666274830656557657055342"
+	"393552148933959057023293404027940528842591460490646295820755"
+	"765633076707491896621769767253619370462005760078938144396953"
+	"018925287611875441613896820035092167912718365454954166761481"
+	"511451950826683236776211829914518353242818636196417736206010"
+	"145109509967467266157037719712666871515644277723594273405669"
+	"093518586548079997818085130346801040781966074621669280188633"
+	"856299289656492439545033914935979634179552686396067914528336"
+	"924678729357419403624798426886422277256625046946795576781709"
+	"298737741510378578072199383561520569978396254537274419476511"
+	"983161908266152660163477408756159700314280122283281906103567"
+	"067156627222418787671312246698375736071215395722993294041012"
+	"744631560602983489316782773611740570974847045870362276861106"
+	"774130949410119612624380274679529647271294627526939490197641"
+	"645383447755544661714281218489998189691140343327976729279891"
+	"077101372792811842951182338559423852563331641533781432796742"
+	"873181364582071661749961126386895359760476172215209100274274"
+	"851619657020388051618654944574445941780637669570374280535432"
+	"399157923698778110534174856844986671232161320063786308144771"
+	"068130888985636449091787794632959555876880672773686838364706"
+	"122084832995722603440165161942472322987408003421165899848443"
+	"566885769845535074102932500939450142098799833145629484519298"
+	"622410092757836842296697186410137365818568152771850732591405"
+	"340248509247875448717161746544246407280913725135059228268131"
+	"453903691495906528862410006254958805237716723952273129715780"
+	"425223305517882562616830806755498203755676925741529569939445"
+	"043490046171854709456730491532189688306135861932534903184518"
+	"717706426178028900836080044604143054210332610482947502104703"
+	"032028463320549525316174330585387581543470878545616097381416"
+	"151451037487775797335749896735101048367502483255117772375025"
+	"269956476872153642623856062175536913321594213515989059505375"
+	"135183515207096576145781316398544325320022366962008554087665"
+	"201050763789833457082359181807492731245904330245198691471329"
+	"319324627030678762142685799400660305214140453863665517807185"
+	"105354694177602424937823924511789133225030926924236498557565"
+	"212794565582753399214908928688568628950225640472058381324292"
+	"866007645368390366981937596341868992912741319342960598330486"
+	"905946276235953206760977215407164729909506118583728562718724"
+	"235732515062300426080741679038098122641980345051854359908213"
+	"563779664847422505775922437272989231878912994048540484468227"
+	"199282393172540734295329890896755037903724644870572648941076"
+	"132423009124870700536763793881894969000042397318202298868940"
+	"530196108237639578098191879486398269734335286831689173606327"
+	"500405178476864790935386838169242131756729797688220656276969"
+	"434749140204830563840068728357383111109865861495106613619153"
+	"421725274090787422508800568671498311491210197298472420373359"
+	"044400631309819996507004167876832936101195902219429743174557"
+	"163362274547892397934880322990633165889175059124060202200452"
+	"648684577182821651588921716304707095995039972827781680978274"
+	"973838841958209215836456212939412000456040621743349981715350"
+	"305133662772937143899882197561295808685181679238411733642697"
+	"748892466944352640514849114619882270112386610376024527101889"
+	"119004382703622803911212700216792471528793241950356942780714"
+	"774957204475130171711488773121937363663487116301055073658645"
+	"980695862570269762957141239436916216723776945522480189876803"
+	"386123827956059851911061129713987960026363403936931196519733"
+	"447116468545744829997003979525368783485129837821983305137448"
+	"031689360764270759437872004895754351479890333865299565515706"
+	"690471030702230767978923298480584997256328135245813726407464"
+	"159230169328539541524724878662873185450510653764301207480799"
+	"488602832618557388369552461881286225098286358672257087829660"
+	"174231705350465091313887538950130611513878400895128618426154"
+	"417299623157313010877679890009181366178705821415173309356192"
+	"686429159835537275875876767919535369607142366878476025895389"
+	"279625854409611312402187942369446302119309705461187450803468"
+	"606366203101933821675974655441744883993796837164178911391575"
+	"751463591650231265941242686108002052587760190005508737394014"
+	"453031299745602214380618917954427803281262300931789525045703"
+	"809571995929933387196864877982754748535701000330924817431298"
+	"365273697561943437891318220691072831562717726798635382168915"
+	"187137325209768346284183473712613689334546294053718697897526"
+	"843398053681374508250012035211936425982389543291022583173280"
+	"985811169783438836113209408147936547458073361625570571955232"
+	"746103236016857123149307991441916732438322836596693687161268"
+	"151183603534413030099360835441935243365729307681545065674775"
+	"655582111435085683962037818795920337874290127531069511296530"
+	"746308404963763022896682861683252995925040540038039172626001"
+	"958340013361801588367655990575379797454237110701588716509764"
+	"759243657077584013289594787913434812509790293636440469725564"
+	"222946985585616708175959944099853232059130350099233608207347"
+	"955460820122006976717445739825352919058005528371183277021250"
+	"186916447745609162301667393077050176560656798672598371789181"
+	"232542195795945358691713761483976100058707499929103557275695"
+	"937295677892604799308353051124627278706035295473126217205599"
+	"530746756205492173148619619059839609108464715691924592576481"
+	"382126740168148453274964955074129767533813576349605298268179"
+	"068244338581354855186516322703199278802275718580352103754433"
+	"240982354636196477238624205575823556321375833700666021556412"
+	"182358152808745703724362178773168996492870519432472065091133"
+	"11767578125e-4966",
+	false,
+	0x0p+0,
+	0x0p+0,
+	0x0p+0,
+	0x8p-152,
+	false,
+	0x0p+0,
+	0x0p+0,
+	0x0p+0,
+	0x4p-1076,
+	false,
+	0x0p+0,
+	0x0p+0,
+	0x0p+0,
+	0x8p-16448,
+	false,
+	0x0p+0,
+	0x0p+0,
+	0x0p+0,
+	0x4p-16448,
+	false,
+	0x0p+0,
+	0x0p+0,
+	0x0p+0,
+	0x4p-1076,
+	false,
+	0x0p+0,
+	0x0p+0,
+	0x0p+0,
+	0x4p-16496),
+  TEST ("3.2375875597190125554622194791138232762497846690173405048449"
+	"421945985197700620596855088357456383249701279390707384240598"
+	"382936099431912710233425550359863089915213963553756674672083"
+	"673128192358701197242632527769951957277781260855740340354110"
+	"173441284912381364143945515141786687806740155311932822963199"
+	"131134959539539338316310328556057915323285980341541664226172"
+	"265348802632447238304822896568757017013159021750199744350376"
+	"278243566840330589397015778833566517337174685312047058426075"
+	"688036665697114219175258344917835835984013214761767520398571"
+	"735519302688914468501077605843338555214753050109407568139932"
+	"147308502166696009676987494125921676927574464221699654264839"
+	"192243410627511520570610765229732327315423820550872393685221"
+	"676561948307418196052769717057382723931306989375320957256133"
+	"838073129463951849807075348034900035402513943244599879584009"
+	"391110011261908615236154859382854977144106096407982738165117"
+	"693915685918231984764157652755343417097983676870433731452629"
+	"339981084526616826599425863049784138127555181662391766144738"
+	"159400253422795753041594932607700680306368857466952063923782"
+	"760519487592638820793893796669403574411398166619131986561877"
+	"034635197232626532239192571857518274939275861531537920777299"
+	"133535479548088762634002006634954143608168633852204577195463"
+	"389533233992867620995583241321034602255800668175356808869060"
+	"608582640890741203603916133682748118680676374951545690715916"
+	"241859799379894025137504643469040366684778763795442214328000"
+	"375999444991619403217748350277527106812175542863660436614910"
+	"135938862296156144947361864759321605496309393905421651264941"
+	"669606814994816518612155298709843817262034769175075602668866"
+	"926449523554218142013501373514352370369126244144449924971423"
+	"038024236058971106053649565799145071085840022305247663313482"
+	"714565918140785997808209749619683146844964283106915422726638"
+	"184861327711776708749278315100024436584176080783836115268999"
+	"055336294569042349971163039294272620322160728879610722678506"
+	"182344928526064885227397447578450046944618127903428943538029"
+	"386719288345854473283987116842451647036255801966780244103035"
+	"425445345127067921349083698736056197567752071915587544133815"
+	"717564310032485290205726480489464589999677885266171263493459"
+	"668963623768410922688414177814149693150024191921819721215688"
+	"114324591287371281400636455584825253000890602388603923710921"
+	"026880979879158388608823700222683123228822356907857261909150"
+	"626993825760416437415551396973489279578569909699853422995997"
+	"974315036153120383930698087773157253674975950409660938084071"
+	"173163693891122166282318691732176374528554627905530306369204"
+	"877964658806333996327938827344733821685425961846791581492287"
+	"250044047142934607523718654369478552373072400018635730811749"
+	"291666457582760812726851561001954207941547404866373158231367"
+	"986951247388733285659455982411993350593989550494594498447410"
+	"984783303191128659803467713819821511544998464785455306500918"
+	"241648925913966507036336000231915215026183799886938007038845"
+	"551916478649593272604688927931953165785101738164060543643192"
+	"949066412847647883846835866623820426428526541564774787007791"
+	"235843699657232847114093617412355486871810526396392792853731"
+	"390841657984518997639795008374280777823099107035223998600103"
+	"103211166230289241182380237703814248941627178152962100972452"
+	"217697144954497443279450919433943252592977710901289696002698"
+	"225209041938801190947812141758873162203113090284565687499100"
+	"109623665868340184032428667217835198069330185880779776269137"
+	"742366802202585247113480377505916462865316253065105837519292"
+	"805411191872195967066157363040364443666632564266439033866945"
+	"366496486863801221986778957510023272290593640187551645170603"
+	"215150911733580059874983597994671388176488814794186236946834"
+	"548816837468411497151813344980969677026131105901402313456769"
+	"561412278508799050185582199844418197980544632067644131002512"
+	"557755358307705356209461595354064971347590431926479961905129"
+	"785864961996560707071051177738535042777950247546470241655891"
+	"294428226271478689174637951663865529219133988782700199051475"
+	"108495188941141025360733690471601309904116260484264378352956"
+	"830972782977747351810451586166745640802378131466232692150196"
+	"132319386267589275314909450293562079332893638471814389025392"
+	"970579695249613486078445695214422379148991006996109216699215"
+	"721671648754881325271879493185438097033881789311707997697928"
+	"860866812849648616086569281093053695399558469641977866770538"
+	"476039621947215238679930485285585513808236992918733520331110"
+	"962448142457896209307561142289713638388281085340301520317159"
+	"297224995464365477734040179470355969363384621039467975256670"
+	"339354334892926205316491997244008324897517881293654265688813"
+	"283579663372924392043825371743576754041055802440187836850412"
+	"247984570221893156921757872572872036331343007592090605703195"
+	"088864753777199111760713027328198781654685927174063882187275"
+	"850263521274368447629947228263907797373221137688424821608129"
+	"731003236738630502344377228987961455961818623205503012858619"
+	"800521948637807438081069469400793496307826769301971342062597"
+	"391253779410607511754278887744936774785938056823221738917303"
+	"119592848951788560393540150358649310736020595310015728915288"
+	"289821678102453433273888879288862086153270028346900686360943"
+	"250522514297816412678213672667152836436597491522644579383191"
+	"851483036048273636234050603745735057899230038434384361744893"
+	"838050985090837220507663282503497932038372021626246900935334"
+	"781144388106031405650705176699646299475436084049881780196520"
+	"881623075256119318210664937469946410480660118598143375898298"
+	"965497205621170906772915413181530577151676241283182977713765"
+	"317889730886996471681592298058774155948285325398399674640645"
+	"566475947058303746531133735308766583802401453804232106737787"
+	"768035926272312574958173945816077962772826443125107145322971"
+	"087220172175473177449006473180221085709470643042801004189714"
+	"505520073568915195232936144169440163547568663500508335014169"
+	"425050712038101167190534305435310279534374364467455668392421"
+	"298604104431988622194699721632249712583483143417550152131186"
+	"288827131347662976240916448058011869761525369135147129192405"
+	"037216807405860168320999468074663117771890506566769628495813"
+	"837909047220874786467663205170561835819702362482274133227483"
+	"041342457179876653773960112367066273208176545656826800069574"
+	"547599816180234764485446735080683694920665668954370505715843"
+	"455110709594838989387382250502925336743830916124954071268053"
+	"817964873658921319164268375226716232666274830656557657055342"
+	"393552148933959057023293404027940528842591460490646295820755"
+	"765633076707491896621769767253619370462005760078938144396953"
+	"018925287611875441613896820035092167912718365454954166761481"
+	"511451950826683236776211829914518353242818636196417736206010"
+	"145109509967467266157037719712666871515644277723594273405669"
+	"093518586548079997818085130346801040781966074621669280188633"
+	"856299289656492439545033914935979634179552686396067914528336"
+	"924678729357419403624798426886422277256625046946795576781709"
+	"298737741510378578072199383561520569978396254537274419476511"
+	"983161908266152660163477408756159700314280122283281906103567"
+	"067156627222418787671312246698375736071215395722993294041012"
+	"744631560602983489316782773611740570974847045870362276861106"
+	"774130949410119612624380274679529647271294627526939490197641"
+	"645383447755544661714281218489998189691140343327976729279891"
+	"077101372792811842951182338559423852563331641533781432796742"
+	"873181364582071661749961126386895359760476172215209100274274"
+	"851619657020388051618654944574445941780637669570374280535432"
+	"399157923698778110534174856844986671232161320063786308144771"
+	"068130888985636449091787794632959555876880672773686838364706"
+	"122084832995722603440165161942472322987408003421165899848443"
+	"566885769845535074102932500939450142098799833145629484519298"
+	"622410092757836842296697186410137365818568152771850732591405"
+	"340248509247875448717161746544246407280913725135059228268131"
+	"453903691495906528862410006254958805237716723952273129715780"
+	"425223305517882562616830806755498203755676925741529569939445"
+	"043490046171854709456730491532189688306135861932534903184518"
+	"717706426178028900836080044604143054210332610482947502104703"
+	"032028463320549525316174330585387581543470878545616097381416"
+	"151451037487775797335749896735101048367502483255117772375025"
+	"269956476872153642623856062175536913321594213515989059505375"
+	"135183515207096576145781316398544325320022366962008554087665"
+	"201050763789833457082359181807492731245904330245198691471329"
+	"319324627030678762142685799400660305214140453863665517807185"
+	"105354694177602424937823924511789133225030926924236498557565"
+	"212794565582753399214908928688568628950225640472058381324292"
+	"866007645368390366981937596341868992912741319342960598330486"
+	"905946276235953206760977215407164729909506118583728562718724"
+	"235732515062300426080741679038098122641980345051854359908213"
+	"563779664847422505775922437272989231878912994048540484468227"
+	"199282393172540734295329890896755037903724644870572648941076"
+	"132423009124870700536763793881894969000042397318202298868940"
+	"530196108237639578098191879486398269734335286831689173606327"
+	"500405178476864790935386838169242131756729797688220656276969"
+	"434749140204830563840068728357383111109865861495106613619153"
+	"421725274090787422508800568671498311491210197298472420373359"
+	"044400631309819996507004167876832936101195902219429743174557"
+	"163362274547892397934880322990633165889175059124060202200452"
+	"648684577182821651588921716304707095995039972827781680978274"
+	"973838841958209215836456212939412000456040621743349981715350"
+	"305133662772937143899882197561295808685181679238411733642697"
+	"748892466944352640514849114619882270112386610376024527101889"
+	"119004382703622803911212700216792471528793241950356942780714"
+	"774957204475130171711488773121937363663487116301055073658645"
+	"980695862570269762957141239436916216723776945522480189876803"
+	"386123827956059851911061129713987960026363403936931196519733"
+	"447116468545744829997003979525368783485129837821983305137448"
+	"031689360764270759437872004895754351479890333865299565515706"
+	"690471030702230767978923298480584997256328135245813726407464"
+	"159230169328539541524724878662873185450510653764301207480799"
+	"488602832618557388369552461881286225098286358672257087829660"
+	"174231705350465091313887538950130611513878400895128618426154"
+	"417299623157313010877679890009181366178705821415173309356192"
+	"686429159835537275875876767919535369607142366878476025895389"
+	"279625854409611312402187942369446302119309705461187450803468"
+	"606366203101933821675974655441744883993796837164178911391575"
+	"751463591650231265941242686108002052587760190005508737394014"
+	"453031299745602214380618917954427803281262300931789525045703"
+	"809571995929933387196864877982754748535701000330924817431298"
+	"365273697561943437891318220691072831562717726798635382168915"
+	"187137325209768346284183473712613689334546294053718697897526"
+	"843398053681374508250012035211936425982389543291022583173280"
+	"985811169783438836113209408147936547458073361625570571955232"
+	"746103236016857123149307991441916732438322836596693687161268"
+	"151183603534413030099360835441935243365729307681545065674775"
+	"655582111435085683962037818795920337874290127531069511296530"
+	"746308404963763022896682861683252995925040540038039172626001"
+	"958340013361801588367655990575379797454237110701588716509764"
+	"759243657077584013289594787913434812509790293636440469725564"
+	"222946985585616708175959944099853232059130350099233608207347"
+	"955460820122006976717445739825352919058005528371183277021250"
+	"186916447745609162301667393077050176560656798672598371789181"
+	"232542195795945358691713761483976100058707499929103557275695"
+	"937295677892604799308353051124627278706035295473126217205599"
+	"530746756205492173148619619059839609108464715691924592576481"
+	"382126740168148453274964955074129767533813576349605298268179"
+	"068244338581354855186516322703199278802275718580352103754433"
+	"240982354636196477238624205575823556321375833700666021556412"
+	"182358152808745703724362178773168996492870519432472065091133"
+	"11767578126e-4966",
+	false,
+	0x0p+0,
+	0x0p+0,
+	0x0p+0,
+	0x8p-152,
+	false,
+	0x0p+0,
+	0x0p+0,
+	0x0p+0,
+	0x4p-1076,
+	false,
+	0x0p+0,
+	0x0p+0,
+	0x0p+0,
+	0x8p-16448,
+	false,
+	0x0p+0,
+	0x0p+0,
+	0x0p+0,
+	0x4p-16448,
+	false,
+	0x0p+0,
+	0x0p+0,
+	0x0p+0,
+	0x4p-1076,
+	false,
+	0x0p+0,
+	0x4p-16496,
+	0x0p+0,
+	0x4p-16496),
+  TEST ("-3.237587559719012555462219479113823276249784669017340504844"
+	"942194598519770062059685508835745638324970127939070738424059"
+	"838293609943191271023342555035986308991521396355375667467208"
+	"367312819235870119724263252776995195727778126085574034035411"
+	"017344128491238136414394551514178668780674015531193282296319"
+	"913113495953953933831631032855605791532328598034154166422617"
+	"226534880263244723830482289656875701701315902175019974435037"
+	"627824356684033058939701577883356651733717468531204705842607"
+	"568803666569711421917525834491783583598401321476176752039857"
+	"173551930268891446850107760584333855521475305010940756813993"
+	"214730850216669600967698749412592167692757446422169965426483"
+	"919224341062751152057061076522973232731542382055087239368522"
+	"167656194830741819605276971705738272393130698937532095725613"
+	"383807312946395184980707534803490003540251394324459987958400"
+	"939111001126190861523615485938285497714410609640798273816511"
+	"769391568591823198476415765275534341709798367687043373145262"
+	"933998108452661682659942586304978413812755518166239176614473"
+	"815940025342279575304159493260770068030636885746695206392378"
+	"276051948759263882079389379666940357441139816661913198656187"
+	"703463519723262653223919257185751827493927586153153792077729"
+	"913353547954808876263400200663495414360816863385220457719546"
+	"338953323399286762099558324132103460225580066817535680886906"
+	"060858264089074120360391613368274811868067637495154569071591"
+	"624185979937989402513750464346904036668477876379544221432800"
+	"037599944499161940321774835027752710681217554286366043661491"
+	"013593886229615614494736186475932160549630939390542165126494"
+	"166960681499481651861215529870984381726203476917507560266886"
+	"692644952355421814201350137351435237036912624414444992497142"
+	"303802423605897110605364956579914507108584002230524766331348"
+	"271456591814078599780820974961968314684496428310691542272663"
+	"818486132771177670874927831510002443658417608078383611526899"
+	"905533629456904234997116303929427262032216072887961072267850"
+	"618234492852606488522739744757845004694461812790342894353802"
+	"938671928834585447328398711684245164703625580196678024410303"
+	"542544534512706792134908369873605619756775207191558754413381"
+	"571756431003248529020572648048946458999967788526617126349345"
+	"966896362376841092268841417781414969315002419192181972121568"
+	"811432459128737128140063645558482525300089060238860392371092"
+	"102688097987915838860882370022268312322882235690785726190915"
+	"062699382576041643741555139697348927957856990969985342299599"
+	"797431503615312038393069808777315725367497595040966093808407"
+	"117316369389112216628231869173217637452855462790553030636920"
+	"487796465880633399632793882734473382168542596184679158149228"
+	"725004404714293460752371865436947855237307240001863573081174"
+	"929166645758276081272685156100195420794154740486637315823136"
+	"798695124738873328565945598241199335059398955049459449844741"
+	"098478330319112865980346771381982151154499846478545530650091"
+	"824164892591396650703633600023191521502618379988693800703884"
+	"555191647864959327260468892793195316578510173816406054364319"
+	"294906641284764788384683586662382042642852654156477478700779"
+	"123584369965723284711409361741235548687181052639639279285373"
+	"139084165798451899763979500837428077782309910703522399860010"
+	"310321116623028924118238023770381424894162717815296210097245"
+	"221769714495449744327945091943394325259297771090128969600269"
+	"822520904193880119094781214175887316220311309028456568749910"
+	"010962366586834018403242866721783519806933018588077977626913"
+	"774236680220258524711348037750591646286531625306510583751929"
+	"280541119187219596706615736304036444366663256426643903386694"
+	"536649648686380122198677895751002327229059364018755164517060"
+	"321515091173358005987498359799467138817648881479418623694683"
+	"454881683746841149715181334498096967702613110590140231345676"
+	"956141227850879905018558219984441819798054463206764413100251"
+	"255775535830770535620946159535406497134759043192647996190512"
+	"978586496199656070707105117773853504277795024754647024165589"
+	"129442822627147868917463795166386552921913398878270019905147"
+	"510849518894114102536073369047160130990411626048426437835295"
+	"683097278297774735181045158616674564080237813146623269215019"
+	"613231938626758927531490945029356207933289363847181438902539"
+	"297057969524961348607844569521442237914899100699610921669921"
+	"572167164875488132527187949318543809703388178931170799769792"
+	"886086681284964861608656928109305369539955846964197786677053"
+	"847603962194721523867993048528558551380823699291873352033111"
+	"096244814245789620930756114228971363838828108534030152031715"
+	"929722499546436547773404017947035596936338462103946797525667"
+	"033935433489292620531649199724400832489751788129365426568881"
+	"328357966337292439204382537174357675404105580244018783685041"
+	"224798457022189315692175787257287203633134300759209060570319"
+	"508886475377719911176071302732819878165468592717406388218727"
+	"585026352127436844762994722826390779737322113768842482160812"
+	"973100323673863050234437722898796145596181862320550301285861"
+	"980052194863780743808106946940079349630782676930197134206259"
+	"739125377941060751175427888774493677478593805682322173891730"
+	"311959284895178856039354015035864931073602059531001572891528"
+	"828982167810245343327388887928886208615327002834690068636094"
+	"325052251429781641267821367266715283643659749152264457938319"
+	"185148303604827363623405060374573505789923003843438436174489"
+	"383805098509083722050766328250349793203837202162624690093533"
+	"478114438810603140565070517669964629947543608404988178019652"
+	"088162307525611931821066493746994641048066011859814337589829"
+	"896549720562117090677291541318153057715167624128318297771376"
+	"531788973088699647168159229805877415594828532539839967464064"
+	"556647594705830374653113373530876658380240145380423210673778"
+	"776803592627231257495817394581607796277282644312510714532297"
+	"108722017217547317744900647318022108570947064304280100418971"
+	"450552007356891519523293614416944016354756866350050833501416"
+	"942505071203810116719053430543531027953437436446745566839242"
+	"129860410443198862219469972163224971258348314341755015213118"
+	"628882713134766297624091644805801186976152536913514712919240"
+	"503721680740586016832099946807466311777189050656676962849581"
+	"383790904722087478646766320517056183581970236248227413322748"
+	"304134245717987665377396011236706627320817654565682680006957"
+	"454759981618023476448544673508068369492066566895437050571584"
+	"345511070959483898938738225050292533674383091612495407126805"
+	"381796487365892131916426837522671623266627483065655765705534"
+	"239355214893395905702329340402794052884259146049064629582075"
+	"576563307670749189662176976725361937046200576007893814439695"
+	"301892528761187544161389682003509216791271836545495416676148"
+	"151145195082668323677621182991451835324281863619641773620601"
+	"014510950996746726615703771971266687151564427772359427340566"
+	"909351858654807999781808513034680104078196607462166928018863"
+	"385629928965649243954503391493597963417955268639606791452833"
+	"692467872935741940362479842688642227725662504694679557678170"
+	"929873774151037857807219938356152056997839625453727441947651"
+	"198316190826615266016347740875615970031428012228328190610356"
+	"706715662722241878767131224669837573607121539572299329404101"
+	"274463156060298348931678277361174057097484704587036227686110"
+	"677413094941011961262438027467952964727129462752693949019764"
+	"164538344775554466171428121848999818969114034332797672927989"
+	"107710137279281184295118233855942385256333164153378143279674"
+	"287318136458207166174996112638689535976047617221520910027427"
+	"485161965702038805161865494457444594178063766957037428053543"
+	"239915792369877811053417485684498667123216132006378630814477"
+	"106813088898563644909178779463295955587688067277368683836470"
+	"612208483299572260344016516194247232298740800342116589984844"
+	"356688576984553507410293250093945014209879983314562948451929"
+	"862241009275783684229669718641013736581856815277185073259140"
+	"534024850924787544871716174654424640728091372513505922826813"
+	"145390369149590652886241000625495880523771672395227312971578"
+	"042522330551788256261683080675549820375567692574152956993944"
+	"504349004617185470945673049153218968830613586193253490318451"
+	"871770642617802890083608004460414305421033261048294750210470"
+	"303202846332054952531617433058538758154347087854561609738141"
+	"615145103748777579733574989673510104836750248325511777237502"
+	"526995647687215364262385606217553691332159421351598905950537"
+	"513518351520709657614578131639854432532002236696200855408766"
+	"520105076378983345708235918180749273124590433024519869147132"
+	"931932462703067876214268579940066030521414045386366551780718"
+	"510535469417760242493782392451178913322503092692423649855756"
+	"521279456558275339921490892868856862895022564047205838132429"
+	"286600764536839036698193759634186899291274131934296059833048"
+	"690594627623595320676097721540716472990950611858372856271872"
+	"423573251506230042608074167903809812264198034505185435990821"
+	"356377966484742250577592243727298923187891299404854048446822"
+	"719928239317254073429532989089675503790372464487057264894107"
+	"613242300912487070053676379388189496900004239731820229886894"
+	"053019610823763957809819187948639826973433528683168917360632"
+	"750040517847686479093538683816924213175672979768822065627696"
+	"943474914020483056384006872835738311110986586149510661361915"
+	"342172527409078742250880056867149831149121019729847242037335"
+	"904440063130981999650700416787683293610119590221942974317455"
+	"716336227454789239793488032299063316588917505912406020220045"
+	"264868457718282165158892171630470709599503997282778168097827"
+	"497383884195820921583645621293941200045604062174334998171535"
+	"030513366277293714389988219756129580868518167923841173364269"
+	"774889246694435264051484911461988227011238661037602452710188"
+	"911900438270362280391121270021679247152879324195035694278071"
+	"477495720447513017171148877312193736366348711630105507365864"
+	"598069586257026976295714123943691621672377694552248018987680"
+	"338612382795605985191106112971398796002636340393693119651973"
+	"344711646854574482999700397952536878348512983782198330513744"
+	"803168936076427075943787200489575435147989033386529956551570"
+	"669047103070223076797892329848058499725632813524581372640746"
+	"415923016932853954152472487866287318545051065376430120748079"
+	"948860283261855738836955246188128622509828635867225708782966"
+	"017423170535046509131388753895013061151387840089512861842615"
+	"441729962315731301087767989000918136617870582141517330935619"
+	"268642915983553727587587676791953536960714236687847602589538"
+	"927962585440961131240218794236944630211930970546118745080346"
+	"860636620310193382167597465544174488399379683716417891139157"
+	"575146359165023126594124268610800205258776019000550873739401"
+	"445303129974560221438061891795442780328126230093178952504570"
+	"380957199592993338719686487798275474853570100033092481743129"
+	"836527369756194343789131822069107283156271772679863538216891"
+	"518713732520976834628418347371261368933454629405371869789752"
+	"684339805368137450825001203521193642598238954329102258317328"
+	"098581116978343883611320940814793654745807336162557057195523"
+	"274610323601685712314930799144191673243832283659669368716126"
+	"815118360353441303009936083544193524336572930768154506567477"
+	"565558211143508568396203781879592033787429012753106951129653"
+	"074630840496376302289668286168325299592504054003803917262600"
+	"195834001336180158836765599057537979745423711070158871650976"
+	"475924365707758401328959478791343481250979029363644046972556"
+	"422294698558561670817595994409985323205913035009923360820734"
+	"795546082012200697671744573982535291905800552837118327702125"
+	"018691644774560916230166739307705017656065679867259837178918"
+	"123254219579594535869171376148397610005870749992910355727569"
+	"593729567789260479930835305112462727870603529547312621720559"
+	"953074675620549217314861961905983960910846471569192459257648"
+	"138212674016814845327496495507412976753381357634960529826817"
+	"906824433858135485518651632270319927880227571858035210375443"
+	"324098235463619647723862420557582355632137583370066602155641"
+	"218235815280874570372436217877316899649287051943247206509113"
+	"311767578124e-4966",
+	false,
+	-0x8p-152,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0,
+	false,
+	-0x4p-1076,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0,
+	false,
+	-0x8p-16448,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0,
+	false,
+	-0x4p-16448,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0,
+	false,
+	-0x4p-1076,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0,
+	false,
+	-0x4p-16496,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0),
+  TEST ("-3.237587559719012555462219479113823276249784669017340504844"
+	"942194598519770062059685508835745638324970127939070738424059"
+	"838293609943191271023342555035986308991521396355375667467208"
+	"367312819235870119724263252776995195727778126085574034035411"
+	"017344128491238136414394551514178668780674015531193282296319"
+	"913113495953953933831631032855605791532328598034154166422617"
+	"226534880263244723830482289656875701701315902175019974435037"
+	"627824356684033058939701577883356651733717468531204705842607"
+	"568803666569711421917525834491783583598401321476176752039857"
+	"173551930268891446850107760584333855521475305010940756813993"
+	"214730850216669600967698749412592167692757446422169965426483"
+	"919224341062751152057061076522973232731542382055087239368522"
+	"167656194830741819605276971705738272393130698937532095725613"
+	"383807312946395184980707534803490003540251394324459987958400"
+	"939111001126190861523615485938285497714410609640798273816511"
+	"769391568591823198476415765275534341709798367687043373145262"
+	"933998108452661682659942586304978413812755518166239176614473"
+	"815940025342279575304159493260770068030636885746695206392378"
+	"276051948759263882079389379666940357441139816661913198656187"
+	"703463519723262653223919257185751827493927586153153792077729"
+	"913353547954808876263400200663495414360816863385220457719546"
+	"338953323399286762099558324132103460225580066817535680886906"
+	"060858264089074120360391613368274811868067637495154569071591"
+	"624185979937989402513750464346904036668477876379544221432800"
+	"037599944499161940321774835027752710681217554286366043661491"
+	"013593886229615614494736186475932160549630939390542165126494"
+	"166960681499481651861215529870984381726203476917507560266886"
+	"692644952355421814201350137351435237036912624414444992497142"
+	"303802423605897110605364956579914507108584002230524766331348"
+	"271456591814078599780820974961968314684496428310691542272663"
+	"818486132771177670874927831510002443658417608078383611526899"
+	"905533629456904234997116303929427262032216072887961072267850"
+	"618234492852606488522739744757845004694461812790342894353802"
+	"938671928834585447328398711684245164703625580196678024410303"
+	"542544534512706792134908369873605619756775207191558754413381"
+	"571756431003248529020572648048946458999967788526617126349345"
+	"966896362376841092268841417781414969315002419192181972121568"
+	"811432459128737128140063645558482525300089060238860392371092"
+	"102688097987915838860882370022268312322882235690785726190915"
+	"062699382576041643741555139697348927957856990969985342299599"
+	"797431503615312038393069808777315725367497595040966093808407"
+	"117316369389112216628231869173217637452855462790553030636920"
+	"487796465880633399632793882734473382168542596184679158149228"
+	"725004404714293460752371865436947855237307240001863573081174"
+	"929166645758276081272685156100195420794154740486637315823136"
+	"798695124738873328565945598241199335059398955049459449844741"
+	"098478330319112865980346771381982151154499846478545530650091"
+	"824164892591396650703633600023191521502618379988693800703884"
+	"555191647864959327260468892793195316578510173816406054364319"
+	"294906641284764788384683586662382042642852654156477478700779"
+	"123584369965723284711409361741235548687181052639639279285373"
+	"139084165798451899763979500837428077782309910703522399860010"
+	"310321116623028924118238023770381424894162717815296210097245"
+	"221769714495449744327945091943394325259297771090128969600269"
+	"822520904193880119094781214175887316220311309028456568749910"
+	"010962366586834018403242866721783519806933018588077977626913"
+	"774236680220258524711348037750591646286531625306510583751929"
+	"280541119187219596706615736304036444366663256426643903386694"
+	"536649648686380122198677895751002327229059364018755164517060"
+	"321515091173358005987498359799467138817648881479418623694683"
+	"454881683746841149715181334498096967702613110590140231345676"
+	"956141227850879905018558219984441819798054463206764413100251"
+	"255775535830770535620946159535406497134759043192647996190512"
+	"978586496199656070707105117773853504277795024754647024165589"
+	"129442822627147868917463795166386552921913398878270019905147"
+	"510849518894114102536073369047160130990411626048426437835295"
+	"683097278297774735181045158616674564080237813146623269215019"
+	"613231938626758927531490945029356207933289363847181438902539"
+	"297057969524961348607844569521442237914899100699610921669921"
+	"572167164875488132527187949318543809703388178931170799769792"
+	"886086681284964861608656928109305369539955846964197786677053"
+	"847603962194721523867993048528558551380823699291873352033111"
+	"096244814245789620930756114228971363838828108534030152031715"
+	"929722499546436547773404017947035596936338462103946797525667"
+	"033935433489292620531649199724400832489751788129365426568881"
+	"328357966337292439204382537174357675404105580244018783685041"
+	"224798457022189315692175787257287203633134300759209060570319"
+	"508886475377719911176071302732819878165468592717406388218727"
+	"585026352127436844762994722826390779737322113768842482160812"
+	"973100323673863050234437722898796145596181862320550301285861"
+	"980052194863780743808106946940079349630782676930197134206259"
+	"739125377941060751175427888774493677478593805682322173891730"
+	"311959284895178856039354015035864931073602059531001572891528"
+	"828982167810245343327388887928886208615327002834690068636094"
+	"325052251429781641267821367266715283643659749152264457938319"
+	"185148303604827363623405060374573505789923003843438436174489"
+	"383805098509083722050766328250349793203837202162624690093533"
+	"478114438810603140565070517669964629947543608404988178019652"
+	"088162307525611931821066493746994641048066011859814337589829"
+	"896549720562117090677291541318153057715167624128318297771376"
+	"531788973088699647168159229805877415594828532539839967464064"
+	"556647594705830374653113373530876658380240145380423210673778"
+	"776803592627231257495817394581607796277282644312510714532297"
+	"108722017217547317744900647318022108570947064304280100418971"
+	"450552007356891519523293614416944016354756866350050833501416"
+	"942505071203810116719053430543531027953437436446745566839242"
+	"129860410443198862219469972163224971258348314341755015213118"
+	"628882713134766297624091644805801186976152536913514712919240"
+	"503721680740586016832099946807466311777189050656676962849581"
+	"383790904722087478646766320517056183581970236248227413322748"
+	"304134245717987665377396011236706627320817654565682680006957"
+	"454759981618023476448544673508068369492066566895437050571584"
+	"345511070959483898938738225050292533674383091612495407126805"
+	"381796487365892131916426837522671623266627483065655765705534"
+	"239355214893395905702329340402794052884259146049064629582075"
+	"576563307670749189662176976725361937046200576007893814439695"
+	"301892528761187544161389682003509216791271836545495416676148"
+	"151145195082668323677621182991451835324281863619641773620601"
+	"014510950996746726615703771971266687151564427772359427340566"
+	"909351858654807999781808513034680104078196607462166928018863"
+	"385629928965649243954503391493597963417955268639606791452833"
+	"692467872935741940362479842688642227725662504694679557678170"
+	"929873774151037857807219938356152056997839625453727441947651"
+	"198316190826615266016347740875615970031428012228328190610356"
+	"706715662722241878767131224669837573607121539572299329404101"
+	"274463156060298348931678277361174057097484704587036227686110"
+	"677413094941011961262438027467952964727129462752693949019764"
+	"164538344775554466171428121848999818969114034332797672927989"
+	"107710137279281184295118233855942385256333164153378143279674"
+	"287318136458207166174996112638689535976047617221520910027427"
+	"485161965702038805161865494457444594178063766957037428053543"
+	"239915792369877811053417485684498667123216132006378630814477"
+	"106813088898563644909178779463295955587688067277368683836470"
+	"612208483299572260344016516194247232298740800342116589984844"
+	"356688576984553507410293250093945014209879983314562948451929"
+	"862241009275783684229669718641013736581856815277185073259140"
+	"534024850924787544871716174654424640728091372513505922826813"
+	"145390369149590652886241000625495880523771672395227312971578"
+	"042522330551788256261683080675549820375567692574152956993944"
+	"504349004617185470945673049153218968830613586193253490318451"
+	"871770642617802890083608004460414305421033261048294750210470"
+	"303202846332054952531617433058538758154347087854561609738141"
+	"615145103748777579733574989673510104836750248325511777237502"
+	"526995647687215364262385606217553691332159421351598905950537"
+	"513518351520709657614578131639854432532002236696200855408766"
+	"520105076378983345708235918180749273124590433024519869147132"
+	"931932462703067876214268579940066030521414045386366551780718"
+	"510535469417760242493782392451178913322503092692423649855756"
+	"521279456558275339921490892868856862895022564047205838132429"
+	"286600764536839036698193759634186899291274131934296059833048"
+	"690594627623595320676097721540716472990950611858372856271872"
+	"423573251506230042608074167903809812264198034505185435990821"
+	"356377966484742250577592243727298923187891299404854048446822"
+	"719928239317254073429532989089675503790372464487057264894107"
+	"613242300912487070053676379388189496900004239731820229886894"
+	"053019610823763957809819187948639826973433528683168917360632"
+	"750040517847686479093538683816924213175672979768822065627696"
+	"943474914020483056384006872835738311110986586149510661361915"
+	"342172527409078742250880056867149831149121019729847242037335"
+	"904440063130981999650700416787683293610119590221942974317455"
+	"716336227454789239793488032299063316588917505912406020220045"
+	"264868457718282165158892171630470709599503997282778168097827"
+	"497383884195820921583645621293941200045604062174334998171535"
+	"030513366277293714389988219756129580868518167923841173364269"
+	"774889246694435264051484911461988227011238661037602452710188"
+	"911900438270362280391121270021679247152879324195035694278071"
+	"477495720447513017171148877312193736366348711630105507365864"
+	"598069586257026976295714123943691621672377694552248018987680"
+	"338612382795605985191106112971398796002636340393693119651973"
+	"344711646854574482999700397952536878348512983782198330513744"
+	"803168936076427075943787200489575435147989033386529956551570"
+	"669047103070223076797892329848058499725632813524581372640746"
+	"415923016932853954152472487866287318545051065376430120748079"
+	"948860283261855738836955246188128622509828635867225708782966"
+	"017423170535046509131388753895013061151387840089512861842615"
+	"441729962315731301087767989000918136617870582141517330935619"
+	"268642915983553727587587676791953536960714236687847602589538"
+	"927962585440961131240218794236944630211930970546118745080346"
+	"860636620310193382167597465544174488399379683716417891139157"
+	"575146359165023126594124268610800205258776019000550873739401"
+	"445303129974560221438061891795442780328126230093178952504570"
+	"380957199592993338719686487798275474853570100033092481743129"
+	"836527369756194343789131822069107283156271772679863538216891"
+	"518713732520976834628418347371261368933454629405371869789752"
+	"684339805368137450825001203521193642598238954329102258317328"
+	"098581116978343883611320940814793654745807336162557057195523"
+	"274610323601685712314930799144191673243832283659669368716126"
+	"815118360353441303009936083544193524336572930768154506567477"
+	"565558211143508568396203781879592033787429012753106951129653"
+	"074630840496376302289668286168325299592504054003803917262600"
+	"195834001336180158836765599057537979745423711070158871650976"
+	"475924365707758401328959478791343481250979029363644046972556"
+	"422294698558561670817595994409985323205913035009923360820734"
+	"795546082012200697671744573982535291905800552837118327702125"
+	"018691644774560916230166739307705017656065679867259837178918"
+	"123254219579594535869171376148397610005870749992910355727569"
+	"593729567789260479930835305112462727870603529547312621720559"
+	"953074675620549217314861961905983960910846471569192459257648"
+	"138212674016814845327496495507412976753381357634960529826817"
+	"906824433858135485518651632270319927880227571858035210375443"
+	"324098235463619647723862420557582355632137583370066602155641"
+	"218235815280874570372436217877316899649287051943247206509113"
+	"311767578125e-4966",
+	false,
+	-0x8p-152,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0,
+	false,
+	-0x4p-1076,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0,
+	false,
+	-0x8p-16448,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0,
+	false,
+	-0x4p-16448,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0,
+	false,
+	-0x4p-1076,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0,
+	false,
+	-0x4p-16496,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0),
+  TEST ("-3.237587559719012555462219479113823276249784669017340504844"
+	"942194598519770062059685508835745638324970127939070738424059"
+	"838293609943191271023342555035986308991521396355375667467208"
+	"367312819235870119724263252776995195727778126085574034035411"
+	"017344128491238136414394551514178668780674015531193282296319"
+	"913113495953953933831631032855605791532328598034154166422617"
+	"226534880263244723830482289656875701701315902175019974435037"
+	"627824356684033058939701577883356651733717468531204705842607"
+	"568803666569711421917525834491783583598401321476176752039857"
+	"173551930268891446850107760584333855521475305010940756813993"
+	"214730850216669600967698749412592167692757446422169965426483"
+	"919224341062751152057061076522973232731542382055087239368522"
+	"167656194830741819605276971705738272393130698937532095725613"
+	"383807312946395184980707534803490003540251394324459987958400"
+	"939111001126190861523615485938285497714410609640798273816511"
+	"769391568591823198476415765275534341709798367687043373145262"
+	"933998108452661682659942586304978413812755518166239176614473"
+	"815940025342279575304159493260770068030636885746695206392378"
+	"276051948759263882079389379666940357441139816661913198656187"
+	"703463519723262653223919257185751827493927586153153792077729"
+	"913353547954808876263400200663495414360816863385220457719546"
+	"338953323399286762099558324132103460225580066817535680886906"
+	"060858264089074120360391613368274811868067637495154569071591"
+	"624185979937989402513750464346904036668477876379544221432800"
+	"037599944499161940321774835027752710681217554286366043661491"
+	"013593886229615614494736186475932160549630939390542165126494"
+	"166960681499481651861215529870984381726203476917507560266886"
+	"692644952355421814201350137351435237036912624414444992497142"
+	"303802423605897110605364956579914507108584002230524766331348"
+	"271456591814078599780820974961968314684496428310691542272663"
+	"818486132771177670874927831510002443658417608078383611526899"
+	"905533629456904234997116303929427262032216072887961072267850"
+	"618234492852606488522739744757845004694461812790342894353802"
+	"938671928834585447328398711684245164703625580196678024410303"
+	"542544534512706792134908369873605619756775207191558754413381"
+	"571756431003248529020572648048946458999967788526617126349345"
+	"966896362376841092268841417781414969315002419192181972121568"
+	"811432459128737128140063645558482525300089060238860392371092"
+	"102688097987915838860882370022268312322882235690785726190915"
+	"062699382576041643741555139697348927957856990969985342299599"
+	"797431503615312038393069808777315725367497595040966093808407"
+	"117316369389112216628231869173217637452855462790553030636920"
+	"487796465880633399632793882734473382168542596184679158149228"
+	"725004404714293460752371865436947855237307240001863573081174"
+	"929166645758276081272685156100195420794154740486637315823136"
+	"798695124738873328565945598241199335059398955049459449844741"
+	"098478330319112865980346771381982151154499846478545530650091"
+	"824164892591396650703633600023191521502618379988693800703884"
+	"555191647864959327260468892793195316578510173816406054364319"
+	"294906641284764788384683586662382042642852654156477478700779"
+	"123584369965723284711409361741235548687181052639639279285373"
+	"139084165798451899763979500837428077782309910703522399860010"
+	"310321116623028924118238023770381424894162717815296210097245"
+	"221769714495449744327945091943394325259297771090128969600269"
+	"822520904193880119094781214175887316220311309028456568749910"
+	"010962366586834018403242866721783519806933018588077977626913"
+	"774236680220258524711348037750591646286531625306510583751929"
+	"280541119187219596706615736304036444366663256426643903386694"
+	"536649648686380122198677895751002327229059364018755164517060"
+	"321515091173358005987498359799467138817648881479418623694683"
+	"454881683746841149715181334498096967702613110590140231345676"
+	"956141227850879905018558219984441819798054463206764413100251"
+	"255775535830770535620946159535406497134759043192647996190512"
+	"978586496199656070707105117773853504277795024754647024165589"
+	"129442822627147868917463795166386552921913398878270019905147"
+	"510849518894114102536073369047160130990411626048426437835295"
+	"683097278297774735181045158616674564080237813146623269215019"
+	"613231938626758927531490945029356207933289363847181438902539"
+	"297057969524961348607844569521442237914899100699610921669921"
+	"572167164875488132527187949318543809703388178931170799769792"
+	"886086681284964861608656928109305369539955846964197786677053"
+	"847603962194721523867993048528558551380823699291873352033111"
+	"096244814245789620930756114228971363838828108534030152031715"
+	"929722499546436547773404017947035596936338462103946797525667"
+	"033935433489292620531649199724400832489751788129365426568881"
+	"328357966337292439204382537174357675404105580244018783685041"
+	"224798457022189315692175787257287203633134300759209060570319"
+	"508886475377719911176071302732819878165468592717406388218727"
+	"585026352127436844762994722826390779737322113768842482160812"
+	"973100323673863050234437722898796145596181862320550301285861"
+	"980052194863780743808106946940079349630782676930197134206259"
+	"739125377941060751175427888774493677478593805682322173891730"
+	"311959284895178856039354015035864931073602059531001572891528"
+	"828982167810245343327388887928886208615327002834690068636094"
+	"325052251429781641267821367266715283643659749152264457938319"
+	"185148303604827363623405060374573505789923003843438436174489"
+	"383805098509083722050766328250349793203837202162624690093533"
+	"478114438810603140565070517669964629947543608404988178019652"
+	"088162307525611931821066493746994641048066011859814337589829"
+	"896549720562117090677291541318153057715167624128318297771376"
+	"531788973088699647168159229805877415594828532539839967464064"
+	"556647594705830374653113373530876658380240145380423210673778"
+	"776803592627231257495817394581607796277282644312510714532297"
+	"108722017217547317744900647318022108570947064304280100418971"
+	"450552007356891519523293614416944016354756866350050833501416"
+	"942505071203810116719053430543531027953437436446745566839242"
+	"129860410443198862219469972163224971258348314341755015213118"
+	"628882713134766297624091644805801186976152536913514712919240"
+	"503721680740586016832099946807466311777189050656676962849581"
+	"383790904722087478646766320517056183581970236248227413322748"
+	"304134245717987665377396011236706627320817654565682680006957"
+	"454759981618023476448544673508068369492066566895437050571584"
+	"345511070959483898938738225050292533674383091612495407126805"
+	"381796487365892131916426837522671623266627483065655765705534"
+	"239355214893395905702329340402794052884259146049064629582075"
+	"576563307670749189662176976725361937046200576007893814439695"
+	"301892528761187544161389682003509216791271836545495416676148"
+	"151145195082668323677621182991451835324281863619641773620601"
+	"014510950996746726615703771971266687151564427772359427340566"
+	"909351858654807999781808513034680104078196607462166928018863"
+	"385629928965649243954503391493597963417955268639606791452833"
+	"692467872935741940362479842688642227725662504694679557678170"
+	"929873774151037857807219938356152056997839625453727441947651"
+	"198316190826615266016347740875615970031428012228328190610356"
+	"706715662722241878767131224669837573607121539572299329404101"
+	"274463156060298348931678277361174057097484704587036227686110"
+	"677413094941011961262438027467952964727129462752693949019764"
+	"164538344775554466171428121848999818969114034332797672927989"
+	"107710137279281184295118233855942385256333164153378143279674"
+	"287318136458207166174996112638689535976047617221520910027427"
+	"485161965702038805161865494457444594178063766957037428053543"
+	"239915792369877811053417485684498667123216132006378630814477"
+	"106813088898563644909178779463295955587688067277368683836470"
+	"612208483299572260344016516194247232298740800342116589984844"
+	"356688576984553507410293250093945014209879983314562948451929"
+	"862241009275783684229669718641013736581856815277185073259140"
+	"534024850924787544871716174654424640728091372513505922826813"
+	"145390369149590652886241000625495880523771672395227312971578"
+	"042522330551788256261683080675549820375567692574152956993944"
+	"504349004617185470945673049153218968830613586193253490318451"
+	"871770642617802890083608004460414305421033261048294750210470"
+	"303202846332054952531617433058538758154347087854561609738141"
+	"615145103748777579733574989673510104836750248325511777237502"
+	"526995647687215364262385606217553691332159421351598905950537"
+	"513518351520709657614578131639854432532002236696200855408766"
+	"520105076378983345708235918180749273124590433024519869147132"
+	"931932462703067876214268579940066030521414045386366551780718"
+	"510535469417760242493782392451178913322503092692423649855756"
+	"521279456558275339921490892868856862895022564047205838132429"
+	"286600764536839036698193759634186899291274131934296059833048"
+	"690594627623595320676097721540716472990950611858372856271872"
+	"423573251506230042608074167903809812264198034505185435990821"
+	"356377966484742250577592243727298923187891299404854048446822"
+	"719928239317254073429532989089675503790372464487057264894107"
+	"613242300912487070053676379388189496900004239731820229886894"
+	"053019610823763957809819187948639826973433528683168917360632"
+	"750040517847686479093538683816924213175672979768822065627696"
+	"943474914020483056384006872835738311110986586149510661361915"
+	"342172527409078742250880056867149831149121019729847242037335"
+	"904440063130981999650700416787683293610119590221942974317455"
+	"716336227454789239793488032299063316588917505912406020220045"
+	"264868457718282165158892171630470709599503997282778168097827"
+	"497383884195820921583645621293941200045604062174334998171535"
+	"030513366277293714389988219756129580868518167923841173364269"
+	"774889246694435264051484911461988227011238661037602452710188"
+	"911900438270362280391121270021679247152879324195035694278071"
+	"477495720447513017171148877312193736366348711630105507365864"
+	"598069586257026976295714123943691621672377694552248018987680"
+	"338612382795605985191106112971398796002636340393693119651973"
+	"344711646854574482999700397952536878348512983782198330513744"
+	"803168936076427075943787200489575435147989033386529956551570"
+	"669047103070223076797892329848058499725632813524581372640746"
+	"415923016932853954152472487866287318545051065376430120748079"
+	"948860283261855738836955246188128622509828635867225708782966"
+	"017423170535046509131388753895013061151387840089512861842615"
+	"441729962315731301087767989000918136617870582141517330935619"
+	"268642915983553727587587676791953536960714236687847602589538"
+	"927962585440961131240218794236944630211930970546118745080346"
+	"860636620310193382167597465544174488399379683716417891139157"
+	"575146359165023126594124268610800205258776019000550873739401"
+	"445303129974560221438061891795442780328126230093178952504570"
+	"380957199592993338719686487798275474853570100033092481743129"
+	"836527369756194343789131822069107283156271772679863538216891"
+	"518713732520976834628418347371261368933454629405371869789752"
+	"684339805368137450825001203521193642598238954329102258317328"
+	"098581116978343883611320940814793654745807336162557057195523"
+	"274610323601685712314930799144191673243832283659669368716126"
+	"815118360353441303009936083544193524336572930768154506567477"
+	"565558211143508568396203781879592033787429012753106951129653"
+	"074630840496376302289668286168325299592504054003803917262600"
+	"195834001336180158836765599057537979745423711070158871650976"
+	"475924365707758401328959478791343481250979029363644046972556"
+	"422294698558561670817595994409985323205913035009923360820734"
+	"795546082012200697671744573982535291905800552837118327702125"
+	"018691644774560916230166739307705017656065679867259837178918"
+	"123254219579594535869171376148397610005870749992910355727569"
+	"593729567789260479930835305112462727870603529547312621720559"
+	"953074675620549217314861961905983960910846471569192459257648"
+	"138212674016814845327496495507412976753381357634960529826817"
+	"906824433858135485518651632270319927880227571858035210375443"
+	"324098235463619647723862420557582355632137583370066602155641"
+	"218235815280874570372436217877316899649287051943247206509113"
+	"311767578126e-4966",
+	false,
+	-0x8p-152,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0,
+	false,
+	-0x4p-1076,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0,
+	false,
+	-0x8p-16448,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0,
+	false,
+	-0x4p-16448,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0,
+	false,
+	-0x4p-1076,
+	-0x0p+0,
+	-0x0p+0,
+	-0x0p+0,
+	false,
+	-0x4p-16496,
+	-0x4p-16496,
+	-0x0p+0,
+	-0x0p+0),
+};
diff --git a/REORG.TODO/stdlib/tst-strtod-round-skeleton.c b/REORG.TODO/stdlib/tst-strtod-round-skeleton.c
new file mode 100644
index 0000000000..73603e6158
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-strtod-round-skeleton.c
@@ -0,0 +1,252 @@
+/* Test for correct rounding of results of strtod and related
+   functions.
+   Copyright (C) 2012-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* Defining _LIBC_TEST ensures long double math functions are
+   declared in the headers.  */
+#define _LIBC_TEST 1
+#include <fenv.h>
+#include <float.h>
+#include <math.h>
+#include <stdbool.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <math-tests.h>
+
+#include "tst-strtod.h"
+
+/* Non-standard macros expected to be externally defined:
+
+   L_(str): Pastes the appropriate modifier to a string literal str.
+
+   FNPFX: Expands to the correct prefix for the strtod equivalent
+          of type CHAR. (e.g str or wcs).
+
+   CHAR: Expands to the string type being tested (e.g wchar_t or char).
+
+   STRM: Expands to a string literal suitable for printing CHAR* via
+         printf (e.g "%s" or "%ls"). */
+
+#define _CONCAT(a, b) a ## b
+#define CONCAT(a, b) _CONCAT (a, b)
+
+#define STRTO(x) CONCAT (CONCAT (FNPFX, to), x)
+
+#if LDBL_MANT_DIG == 106 && LDBL_MAX_EXP == 1024
+/* This is a stupid hack for IBM long double.  This test ignores
+   inexact values for long double due to the limitations of the
+   format.  This ensures rounding tests are ignored.  */
+# undef ROUNDING_TESTS_long_double
+# define ROUNDING_TESTS_long_double(x) 0
+#endif
+
+/* Generator to create an FTYPE member variabled named FSUF
+   used to populate struct member variables.  */
+#define FTYPE_MEMBER(FSUF, FTYPE, FTOSTR, LSUF, CSUF)  \
+       FTYPE FSUF;
+
+/* Likewise, but each member is of type bool.  */
+#define BOOL_MEMBER(FSUF, FTYPE, FTOSTR, LSUF, CSUF)  \
+       bool FSUF;
+
+#define STRUCT_FOREACH_FLOAT_FTYPE GEN_TEST_STRTOD_FOREACH (FTYPE_MEMBER)
+#define STRUCT_FOREACH_FLOAT_BOOL GEN_TEST_STRTOD_FOREACH (BOOL_MEMBER)
+
+/* Define the long double choose (CHOOSE_ld) macro
+   to select the appropriate generated long double
+   value from the generated test data.  */
+#if LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024
+/* This is for the long double == double format.  */
+# define CHOOSE_ld(f,d,...) d
+#elif LDBL_MANT_DIG == 64 && LDBL_MAX_EXP == 16384 && LDBL_MIN_EXP == -16381
+/* This is for the Intel extended float format.  */
+# define CHOOSE_ld(f,d,ld64i,...) ld64i
+#elif LDBL_MANT_DIG == 64 && LDBL_MAX_EXP == 16384 && LDBL_MIN_EXP == -16382
+/* This is for the Motorola extended float format.  */
+# define CHOOSE_ld(f,d,ld64i,ld64m,...) ld64m
+#elif LDBL_MANT_DIG == 106 && LDBL_MAX_EXP == 1024
+/* This is for the IBM extended double format.  */
+# define CHOOSE_ld(f,d,ld64i,ld64m,ld106,...) ld106
+#elif LDBL_MANT_DIG == 113 && LDBL_MAX_EXP == 16384
+/* This is for the IEEE binary128 format.  */
+# define CHOOSE_ld(f,d,ld64i,ld64m,ld106,ld113,...) ld113
+#else
+# error "unknown long double format"
+#endif
+
+/* Add type specific choosing macros below.  */
+#define CHOOSE_f(f,...) f
+#define CHOOSE_d(f,d,...) d
+/* long double is special, and handled above.  */
+
+/* Selector for expected result field of a given type.  */
+#define _ENTRY(FSUF, FTYPE, FTOSTR, LSUF, CSUF, ...)  \
+  CONCAT (CHOOSE_ ## FSUF (__VA_ARGS__), LSUF),
+#define ENTRY(...) \
+  GEN_TEST_STRTOD_FOREACH (_ENTRY, __VA_ARGS__)
+
+/* Selector for boolean exact tag of expected results.  */
+#define _XNTRY(FSUF, FTYPE, FTOSTR, LSUF, CSUF, ...)  \
+  CHOOSE_ ## FSUF (__VA_ARGS__),
+#define XNTRY(...) \
+  GEN_TEST_STRTOD_FOREACH (_XNTRY, __VA_ARGS__)
+
+/* This is hacky way around the seemingly unavoidable macro
+   expansion of the INFINITY or HUGE_VAL like macros in the
+   above.  It is assumed the compiler will implicitly convert
+   the infinity correctly.  */
+#define INF INFINITY + 0.0
+
+/* This macro is used in conjunction with the output from the
+   gen-tst-strtod-round utility to select the appropriately
+   rounded long double value for a given format.  */
+#define TEST(s,						\
+	     fx, fd, fn, fz, fu,			\
+	     dx, dd, dn, dz, du,			\
+	     ld64ix, ld64id, ld64in, ld64iz, ld64iu,	\
+	     ld64mx, ld64md, ld64mn, ld64mz, ld64mu,	\
+	     ld106x, ld106d, ld106n, ld106z, ld106u,	\
+	     ld113x, ld113d, ld113n, ld113z, ld113u)	\
+  {							\
+    L_ (s),						\
+    { XNTRY (fx, dx, ld64ix, ld64mx, ld106x, ld113x) },	\
+    {							\
+    { ENTRY (fn, dn, ld64in, ld64mn, ld106n, ld113n) },	\
+    { ENTRY (fd, dd, ld64id, ld64md, ld106d, ld113d) },	\
+    { ENTRY (fz, dz, ld64iz, ld64mz, ld106z, ld113z) },	\
+    { ENTRY (fu, du, ld64iu, ld64mu, ld106u, ld113u) }	\
+    }							\
+  }
+
+struct test_exactness
+  {
+  STRUCT_FOREACH_FLOAT_BOOL
+  };
+
+struct test_results
+  {
+  STRUCT_FOREACH_FLOAT_FTYPE
+  };
+
+struct test {
+  const CHAR *s;
+  struct test_exactness exact;
+  struct test_results r[4];
+};
+
+/* Include the generated test data.  */
+#include "tst-strtod-round-data.h"
+
+#define STRX(x) #x
+#define STR(x) STRX (x)
+#define FNPFXS STR (FNPFX)
+
+#ifndef FE_INEXACT
+# define FE_INEXACT 0
+#endif
+
+#define GEN_ONE_TEST(FSUF, FTYPE, FTOSTR, LSUF, CSUF)		\
+{								\
+  feclearexcept (FE_INEXACT);					\
+  FTYPE f = STRTO (FSUF) (s, NULL);				\
+  if (f != expected->FSUF					\
+      || (copysign ## CSUF) (1.0 ## LSUF, f)			\
+	 != (copysign ## CSUF) (1.0 ## LSUF, expected->FSUF))	\
+    {								\
+      char efstr[FSTRLENMAX];					\
+      char fstr[FSTRLENMAX];					\
+      FTOSTR (efstr, FSTRLENMAX, "%a", expected->FSUF);		\
+      FTOSTR (fstr, FSTRLENMAX, "%a", f);			\
+      printf (FNPFXS "to" #FSUF  " (" STRM ") returned %s not "	\
+	      "%s (%s)\n", s, fstr, efstr, mode_name);		\
+      if (ROUNDING_TESTS (FTYPE, rnd_mode) || exact->FSUF)	\
+	result = 1;						\
+      else							\
+	printf ("ignoring this inexact result\n");		\
+    }								\
+  else if (FE_INEXACT != 0)					\
+    {								\
+      bool inexact_raised = fetestexcept (FE_INEXACT) != 0;	\
+      if (inexact_raised != !exact->FSUF)			\
+	{							\
+	  printf (FNPFXS "to" #FSUF  " (" STRM ") inexact %d "	\
+		  "not %d\n", s, inexact_raised, !exact->FSUF);	\
+	  if (EXCEPTION_TESTS (FTYPE))				\
+	    result = 1;						\
+	  else							\
+	    printf ("ignoring this exception error\n");		\
+	}							\
+    }								\
+}
+
+static int
+test_in_one_mode (const CHAR *s, const struct test_results *expected,
+		  const struct test_exactness *exact, const char *mode_name,
+		  int rnd_mode)
+{
+  int result = 0;
+  GEN_TEST_STRTOD_FOREACH (GEN_ONE_TEST)
+  return result;
+}
+
+static const struct fetestmodes
+  {
+  const char *mode_name;
+  int rnd_mode;
+  int rnd_i; /* Corresponding index into r array of struct test.  */
+  } modes[] = {
+    { "default rounding mode", FE_TONEAREST, 0 },
+#ifdef FE_DOWNWARD
+    { "FE_DOWNWARD", FE_DOWNWARD, 1 },
+#endif
+#ifdef FE_TOWARDZERO
+    { "FE_TOWARDZERO", FE_TOWARDZERO, 2 },
+#endif
+#ifdef FE_UPWARD
+    { "FE_UPWARD", FE_UPWARD, 3 },
+#endif
+    {}
+};
+
+static int
+do_test (void)
+{
+  int save_round_mode __attribute__ ((unused)) = fegetround ();
+  int result = 0;
+  for (size_t i = 0; i < sizeof (tests) / sizeof (tests[0]); i++)
+    {
+      result |= test_in_one_mode (tests[i].s, &tests[i].r[modes[0].rnd_i],
+				  &tests[i].exact, modes[0].mode_name,
+				  modes[0].rnd_mode);
+      for (const struct fetestmodes *m = &modes[1]; m->mode_name != NULL; m++)
+	{
+	  if (!fesetround (m->rnd_mode))
+	    {
+	      result |= test_in_one_mode (tests[i].s, &tests[i].r[m->rnd_i],
+					  &tests[i].exact, m->mode_name,
+					  m->rnd_mode);
+	      fesetround (save_round_mode);
+	    }
+	}
+    }
+  return result;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-strtod-round.c b/REORG.TODO/stdlib/tst-strtod-round.c
new file mode 100644
index 0000000000..2990d544d4
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-strtod-round.c
@@ -0,0 +1,24 @@
+/* char shim for tst-strtod-round-skeleton.c.
+   Copyright (C) 2016-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#define L_(str) str
+#define FNPFX   str
+#define CHAR    char
+#define STRM    "%s"
+
+#include <tst-strtod-round-skeleton.c>
diff --git a/REORG.TODO/stdlib/tst-strtod-underflow.c b/REORG.TODO/stdlib/tst-strtod-underflow.c
new file mode 100644
index 0000000000..f623a6be90
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-strtod-underflow.c
@@ -0,0 +1,225 @@
+/* Test for strtod handling of arguments that may cause floating-point
+   underflow.
+   Copyright (C) 2012-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <errno.h>
+#include <fenv.h>
+#include <float.h>
+#include <stdbool.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <tininess.h>
+
+enum underflow_case
+  {
+    /* Result is exact or outside the subnormal range.  */
+    UNDERFLOW_NONE,
+    /* Result has magnitude at most half way between the largest
+       subnormal value and the smallest positive normal value, and is
+       not exact, so underflows in all rounding modes and independent
+       of how tininess is detected.  */
+    UNDERFLOW_ALWAYS,
+    /* Result is positive, with magnitude larger than half way between
+       the largest subnormal value and the least positive normal
+       value, but would underflow when rounded to nearest to normal
+       precision, so underflows after rounding in all modes except
+       rounding upward.  */
+    UNDERFLOW_EXCEPT_UPWARD,
+    /* Likewise, for a negative result, underflowing after rounding
+       except when rounding downward.  */
+    UNDERFLOW_EXCEPT_DOWNWARD,
+    /* Result is positive, with magnitude at least three quarters of
+       the way from the largest subnormal value to the smallest
+       positive normal value, so underflows after rounding only when
+       rounding downward or toward zero.  */
+    UNDERFLOW_ONLY_DOWNWARD_ZERO,
+    /* Likewise, for a negative result, underflowing after rounding
+       only when rounding upward or toward zero.  */
+    UNDERFLOW_ONLY_UPWARD_ZERO,
+  };
+
+struct test
+{
+  const char *s;
+  enum underflow_case c;
+};
+
+static const struct test tests[] =
+  {
+    { "0x1p-1022", UNDERFLOW_NONE },
+    { "-0x1p-1022", UNDERFLOW_NONE },
+    { "0x0p-10000000000000000000000000", UNDERFLOW_NONE },
+    { "-0x0p-10000000000000000000000000", UNDERFLOW_NONE },
+    { "0x1p-10000000000000000000000000", UNDERFLOW_ALWAYS },
+    { "-0x1p-10000000000000000000000000", UNDERFLOW_ALWAYS },
+    { "0x1.000000000000000000001p-1022", UNDERFLOW_NONE },
+    { "-0x1.000000000000000000001p-1022", UNDERFLOW_NONE },
+    { "0x1p-1075", UNDERFLOW_ALWAYS },
+    { "-0x1p-1075", UNDERFLOW_ALWAYS },
+    { "0x1p-1023", UNDERFLOW_NONE },
+    { "-0x1p-1023", UNDERFLOW_NONE },
+    { "0x1p-1074", UNDERFLOW_NONE },
+    { "-0x1p-1074", UNDERFLOW_NONE },
+    { "0x1.ffffffffffffep-1023", UNDERFLOW_NONE },
+    { "-0x1.ffffffffffffep-1023", UNDERFLOW_NONE },
+    { "0x1.fffffffffffffp-1023", UNDERFLOW_ALWAYS },
+    { "-0x1.fffffffffffffp-1023", UNDERFLOW_ALWAYS },
+    { "0x1.fffffffffffff0001p-1023", UNDERFLOW_EXCEPT_UPWARD },
+    { "-0x1.fffffffffffff0001p-1023", UNDERFLOW_EXCEPT_DOWNWARD },
+    { "0x1.fffffffffffff7fffp-1023", UNDERFLOW_EXCEPT_UPWARD },
+    { "-0x1.fffffffffffff7fffp-1023", UNDERFLOW_EXCEPT_DOWNWARD },
+    { "0x1.fffffffffffff8p-1023", UNDERFLOW_ONLY_DOWNWARD_ZERO },
+    { "-0x1.fffffffffffff8p-1023", UNDERFLOW_ONLY_UPWARD_ZERO },
+    { "0x1.fffffffffffffffffp-1023", UNDERFLOW_ONLY_DOWNWARD_ZERO },
+    { "-0x1.fffffffffffffffffp-1023", UNDERFLOW_ONLY_UPWARD_ZERO },
+  };
+
+/* Return whether to expect underflow from a particular testcase, in a
+   given rounding mode.  */
+
+static bool
+expect_underflow (enum underflow_case c, int rm)
+{
+  if (c == UNDERFLOW_NONE)
+    return false;
+  if (c == UNDERFLOW_ALWAYS)
+    return true;
+  if (TININESS_AFTER_ROUNDING)
+    {
+      switch (rm)
+	{
+#ifdef FE_DOWNWARD
+	case FE_DOWNWARD:
+	  return (c == UNDERFLOW_EXCEPT_UPWARD
+		  || c == UNDERFLOW_ONLY_DOWNWARD_ZERO);
+#endif
+
+#ifdef FE_TOWARDZERO
+	case FE_TOWARDZERO:
+	  return true;
+#endif
+
+#ifdef FE_UPWARD
+	case FE_UPWARD:
+	  return (c == UNDERFLOW_EXCEPT_DOWNWARD
+		  || c == UNDERFLOW_ONLY_UPWARD_ZERO);
+#endif
+
+	default:
+	  return (c == UNDERFLOW_EXCEPT_UPWARD
+		  || c == UNDERFLOW_EXCEPT_DOWNWARD);
+	}
+    }
+  else
+    return true;
+}
+
+static bool support_underflow_exception = false;
+volatile double d = DBL_MIN;
+volatile double dd;
+
+static int
+test_in_one_mode (const char *s, enum underflow_case c, int rm,
+		  const char *mode_name)
+{
+  int result = 0;
+  feclearexcept (FE_ALL_EXCEPT);
+  errno = 0;
+  double d = strtod (s, NULL);
+  int got_errno = errno;
+#ifdef FE_UNDERFLOW
+  bool got_fe_underflow = fetestexcept (FE_UNDERFLOW) != 0;
+#else
+  bool got_fe_underflow = false;
+#endif
+  printf ("strtod (%s) (%s) returned %a, errno = %d, %sunderflow exception\n",
+	  s, mode_name, d, got_errno, got_fe_underflow ? "" : "no ");
+  bool this_expect_underflow = expect_underflow (c, rm);
+  if (got_errno != 0 && got_errno != ERANGE)
+    {
+      puts ("FAIL: errno neither 0 nor ERANGE");
+      result = 1;
+    }
+  else if (this_expect_underflow != (errno == ERANGE))
+    {
+      puts ("FAIL: underflow from errno differs from expectations");
+      result = 1;
+    }
+  if (support_underflow_exception && got_fe_underflow != this_expect_underflow)
+    {
+      puts ("FAIL: underflow from exceptions differs from expectations");
+      result = 1;
+    }
+  return result;
+}
+
+static int
+do_test (void)
+{
+  int save_round_mode __attribute__ ((unused)) = fegetround ();
+  int result = 0;
+#ifdef FE_TONEAREST
+  const int fe_tonearest = FE_TONEAREST;
+#else
+  const int fe_tonearest = 0;
+# if defined FE_DOWNWARD || defined FE_TOWARDZERO || defined FE_UPWARD
+#  error "FE_TONEAREST not defined, but another rounding mode is"
+# endif
+#endif
+#ifdef FE_UNDERFLOW
+  feclearexcept (FE_ALL_EXCEPT);
+  dd = d * d;
+  if (fetestexcept (FE_UNDERFLOW))
+    support_underflow_exception = true;
+  else
+    puts ("underflow exception not supported at runtime, only testing errno");
+#endif
+  for (size_t i = 0; i < sizeof (tests) / sizeof (tests[0]); i++)
+    {
+      result |= test_in_one_mode (tests[i].s, tests[i].c, fe_tonearest,
+				  "default rounding mode");
+#ifdef FE_DOWNWARD
+      if (!fesetround (FE_DOWNWARD))
+	{
+	  result |= test_in_one_mode (tests[i].s, tests[i].c, FE_DOWNWARD,
+				      "FE_DOWNWARD");
+	  fesetround (save_round_mode);
+	}
+#endif
+#ifdef FE_TOWARDZERO
+      if (!fesetround (FE_TOWARDZERO))
+	{
+	  result |= test_in_one_mode (tests[i].s, tests[i].c, FE_TOWARDZERO,
+				      "FE_TOWARDZERO");
+	  fesetround (save_round_mode);
+	}
+#endif
+#ifdef FE_UPWARD
+      if (!fesetround (FE_UPWARD))
+	{
+	  result |= test_in_one_mode (tests[i].s, tests[i].c, FE_UPWARD,
+				      "FE_UPWARD");
+	  fesetround (save_round_mode);
+	}
+#endif
+    }
+  return result;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-strtod.c b/REORG.TODO/stdlib/tst-strtod.c
new file mode 100644
index 0000000000..1ab7f8a5aa
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-strtod.c
@@ -0,0 +1,218 @@
+/* Basic tests for strtod.
+   Copyright (C) 1991-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <ctype.h>
+#include <locale.h>
+#include <stddef.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <errno.h>
+#include <string.h>
+#include <math.h>
+
+struct ltest
+  {
+    const char *str;		/* Convert this.  */
+    double expect;		/* To get this.  */
+    char left;			/* With this left over.  */
+    int err;			/* And this in errno.  */
+  };
+static const struct ltest tests[] =
+  {
+    { "12.345", 12.345, '\0', 0 },
+    { "12.345e19", 12.345e19, '\0', 0 },
+    { "-.1e+9", -.1e+9, '\0', 0 },
+    { ".125", .125, '\0', 0 },
+    { "1e20", 1e20, '\0', 0 },
+    { "0e-19", 0, '\0', 0 },
+    { "4\00012", 4.0, '\0', 0 },
+    { "5.9e-76", 5.9e-76, '\0', 0 },
+    { "0x1.4p+3", 10.0, '\0', 0 },
+    { "0xAp0", 10.0, '\0', 0 },
+    { "0x0Ap0", 10.0, '\0', 0 },
+    { "0x0A", 10.0, '\0', 0 },
+    { "0xA0", 160.0, '\0', 0 },
+    { "0x0.A0p8", 160.0, '\0', 0 },
+    { "0x0.50p9", 160.0, '\0', 0 },
+    { "0x0.28p10", 160.0, '\0', 0 },
+    { "0x0.14p11", 160.0, '\0', 0 },
+    { "0x0.0A0p12", 160.0, '\0', 0 },
+    { "0x0.050p13", 160.0, '\0', 0 },
+    { "0x0.028p14", 160.0, '\0', 0 },
+    { "0x0.014p15", 160.0, '\0', 0 },
+    { "0x00.00A0p16", 160.0, '\0', 0 },
+    { "0x00.0050p17", 160.0, '\0', 0 },
+    { "0x00.0028p18", 160.0, '\0', 0 },
+    { "0x00.0014p19", 160.0, '\0', 0 },
+    { "0x1p-1023",
+      1.11253692925360069154511635866620203210960799023116591527666e-308,
+      '\0', 0 },
+    { "0x0.8p-1022",
+      1.11253692925360069154511635866620203210960799023116591527666e-308,
+      '\0', 0 },
+    { "Inf", HUGE_VAL, '\0', 0 },
+    { "-Inf", -HUGE_VAL, '\0', 0 },
+    { "+InFiNiTy", HUGE_VAL, '\0', 0 },
+    { "0x80000Ap-23", 0x80000Ap-23, '\0', 0 },
+    { "1e-324", 0, '\0', ERANGE },
+    { "0x100000000000008p0", 0x1p56, '\0', 0 },
+    { "0x100000000000008.p0", 0x1p56, '\0', 0 },
+    { "0x100000000000008.00p0", 0x1p56, '\0', 0 },
+    { "0x10000000000000800p0", 0x1p64, '\0', 0 },
+    { "0x10000000000000801p0", 0x1.0000000000001p64, '\0', 0 },
+    { NULL, 0, '\0', 0 }
+  };
+
+static void expand (char *dst, int c);
+static int long_dbl (void);
+
+static int
+do_test (void)
+{
+  char buf[100];
+  const struct ltest *lt;
+  char *ep;
+  int status = 0;
+  int save_errno;
+
+  for (lt = tests; lt->str != NULL; ++lt)
+    {
+      double d;
+
+      errno = 0;
+      d = strtod(lt->str, &ep);
+      save_errno = errno;
+      printf ("strtod (\"%s\") test %u",
+	     lt->str, (unsigned int) (lt - tests));
+      if (d == lt->expect && *ep == lt->left && save_errno == lt->err)
+	puts ("\tOK");
+      else
+	{
+	  puts ("\tBAD");
+	  if (d != lt->expect)
+	    printf ("  returns %.60g, expected %.60g\n", d, lt->expect);
+	  if (lt->left != *ep)
+	    {
+	      char exp1[5], exp2[5];
+	      expand (exp1, *ep);
+	      expand (exp2, lt->left);
+	      printf ("  leaves '%s', expected '%s'\n", exp1, exp2);
+	    }
+	  if (save_errno != lt->err)
+	    printf ("  errno %d (%s)  instead of %d (%s)\n",
+		    save_errno, strerror (save_errno),
+		    lt->err, strerror (lt->err));
+	  status = 1;
+	}
+    }
+
+  sprintf (buf, "%f", strtod ("-0.0", NULL));
+  if (strcmp (buf, "-0.000000") != 0)
+    {
+      printf ("  strtod (\"-0.0\", NULL) returns \"%s\"\n", buf);
+      status = 1;
+    }
+
+  const char input[] = "3752432815e-39";
+
+  float f1 = strtold (input, NULL);
+  float f2;
+  float f3 = strtof (input, NULL);
+  sscanf (input, "%g", &f2);
+
+  if (f1 != f2)
+    {
+      printf ("f1 = %a != f2 = %a\n", f1, f2);
+      status = 1;
+    }
+  if (f1 != f3)
+    {
+      printf ("f1 = %a != f3 = %a\n", f1, f3);
+      status = 1;
+    }
+  if (f2 != f3)
+    {
+      printf ("f2 = %a != f3 = %a\n", f2, f3);
+      status = 1;
+    }
+
+  const char input2[] = "+1.000000000116415321826934814453125";
+  if (strtold (input2, NULL) != +1.000000000116415321826934814453125L)
+    {
+      printf ("input2: %La != %La\n", strtold (input2, NULL),
+	      +1.000000000116415321826934814453125L);
+      status = 1;
+    }
+
+  static struct { const char *str; long double l; } ltests[] =
+    {
+      { "42.0000000000000000001", 42.0000000000000000001L },
+      { "42.00000000000000000001", 42.00000000000000000001L },
+      { "42.000000000000000000001", 42.000000000000000000001L }
+    };
+  int n;
+  for (n = 0; n < sizeof (ltests) / sizeof (ltests[0]); ++n)
+    if (strtold (ltests[n].str, NULL) != ltests[n].l)
+      {
+	printf ("ltests[%d]: %La != %La\n", n,
+		strtold (ltests[n].str, NULL), ltests[n].l);
+	status = 1;
+      }
+
+  status |= long_dbl ();
+
+  return status ? EXIT_FAILURE : EXIT_SUCCESS;
+}
+
+static void
+expand (char *dst, int c)
+{
+  if (isprint (c))
+    {
+      dst[0] = c;
+      dst[1] = '\0';
+    }
+  else
+    (void) sprintf (dst, "%#.3o", (unsigned int) c);
+}
+
+static int
+long_dbl (void)
+{
+  /* Regenerate this string using
+
+     echo '(2^53-1)*2^(1024-53)' | bc | sed 's/\([^\]*\)\\*$/    "\1"/'
+
+  */
+  static const char longestdbl[] =
+    "17976931348623157081452742373170435679807056752584499659891747680315"
+    "72607800285387605895586327668781715404589535143824642343213268894641"
+    "82768467546703537516986049910576551282076245490090389328944075868508"
+    "45513394230458323690322294816580855933212334827479782620414472316873"
+    "8177180919299881250404026184124858368";
+  double d = strtod (longestdbl, NULL);
+
+  printf ("strtod (\"%s\", NULL) = %g\n", longestdbl, d);
+
+  if (d != 179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000)
+    return 1;
+
+  return 0;
+}
+
+#include <support/test-driver.c>
diff --git a/REORG.TODO/stdlib/tst-strtod.h b/REORG.TODO/stdlib/tst-strtod.h
new file mode 100644
index 0000000000..bf5f90138f
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-strtod.h
@@ -0,0 +1,49 @@
+/* Common utilities for testing strtod and its derivatives.
+   This file is part of the GNU C Library.
+   Copyright (C) 2016-2017 Free Software Foundation, Inc.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _TST_STRTOD_H
+#define _TST_STRTOD_H
+
+#define FSTRLENMAX 128
+
+/* Splat n variants of the same test for the various strtod functions.  */
+#define GEN_TEST_STRTOD_FOREACH(mfunc, ...)			 \
+    mfunc (  f,       float, strfromf, f, f, ##__VA_ARGS__)	 \
+    mfunc (  d,      double, strfromd,  ,  , ##__VA_ARGS__)	 \
+    mfunc ( ld, long double, strfroml, L, l, ##__VA_ARGS__)
+/* The arguments to the generated macros are:
+   FSUF - Function suffix
+   FTYPE - float type
+   FTOSTR - float to string func
+   LSUF - Literal suffix
+   CSUF - C standardish suffix for many of the math functions
+*/
+
+
+
+#define STRTOD_TEST_FOREACH(mfunc, ...)	  \
+({					  \
+   int result = 0;			  \
+   result |= mfunc ## f  (__VA_ARGS__);   \
+   result |= mfunc ## d  (__VA_ARGS__);   \
+   result |= mfunc ## ld (__VA_ARGS__);   \
+   result;				  \
+})
+
+
+#endif
diff --git a/REORG.TODO/stdlib/tst-strtod1i.c b/REORG.TODO/stdlib/tst-strtod1i.c
new file mode 100644
index 0000000000..6f79425667
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-strtod1i.c
@@ -0,0 +1,84 @@
+/* Basic tests for __strtod_internal.
+   Copyright (C) 1991-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <ctype.h>
+#include <locale.h>
+#include <stddef.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <errno.h>
+#include <string.h>
+#include <math.h>
+
+/* Perform a few tests in a locale with thousands separators.  */
+static int
+do_test (void)
+{
+  static const struct
+  {
+    const char *loc;
+    const char *str;
+    double exp;
+    ptrdiff_t nread;
+  } tests[] =
+    {
+      { "de_DE.UTF-8", "1,5", 1.5, 3 },
+      { "de_DE.UTF-8", "1.5", 1.0, 1 },
+      { "de_DE.UTF-8", "1.500", 1500.0, 5 },
+      { "de_DE.UTF-8", "36.893.488.147.419.103.232", 0x1.0p65, 26 }
+    };
+#define ntests (sizeof (tests) / sizeof (tests[0]))
+  size_t n;
+  int result = 0;
+
+  puts ("\nLocale tests");
+
+  for (n = 0; n < ntests; ++n)
+    {
+      double d;
+      char *endp;
+
+      if (setlocale (LC_ALL, tests[n].loc) == NULL)
+	{
+	  printf ("cannot set locale %s\n", tests[n].loc);
+	  result = 1;
+	  continue;
+	}
+
+      d = __strtod_internal (tests[n].str, &endp, 1);
+      if (d != tests[n].exp)
+	{
+	  printf ("strtod(\"%s\") returns %g and not %g\n",
+		  tests[n].str, d, tests[n].exp);
+	  result = 1;
+	}
+      else if (endp - tests[n].str != tests[n].nread)
+	{
+	  printf ("strtod(\"%s\") read %td bytes and not %td\n",
+		  tests[n].str, endp - tests[n].str, tests[n].nread);
+	  result = 1;
+	}
+    }
+
+  if (result == 0)
+    puts ("all OK");
+
+  return result ? EXIT_FAILURE : EXIT_SUCCESS;
+}
+
+#include <support/test-driver.c>
diff --git a/REORG.TODO/stdlib/tst-strtod2.c b/REORG.TODO/stdlib/tst-strtod2.c
new file mode 100644
index 0000000000..a7df82ebbd
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-strtod2.c
@@ -0,0 +1,44 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+struct test
+{
+  const char *str;
+  double result;
+  size_t offset;
+} tests[] =
+{
+  { "0xy", 0.0, 1 },
+  { "0x.y", 0.0, 1 },
+  { "0x0.y", 0.0, 4 },
+  { "0x.0y", 0.0, 4 },
+  { ".y", 0.0, 0 },
+  { "0.y", 0.0, 2 },
+  { ".0y", 0.0, 2 }
+};
+
+static int
+do_test (void)
+{
+  int status = 0;
+  for (size_t i = 0; i < sizeof (tests) / sizeof (tests[0]); ++i)
+    {
+      char *ep;
+      double r = strtod (tests[i].str, &ep);
+      if (r != tests[i].result)
+	{
+	  printf ("test %zu r = %g, expect %g\n", i, r, tests[i].result);
+	  status = 1;
+	}
+      if (ep != tests[i].str + tests[i].offset)
+	{
+	  printf ("test %zu strtod parsed %tu characters, expected %zu\n",
+		  i, ep - tests[i].str, tests[i].offset);
+	  status = 1;
+	}
+    }
+  return status;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-strtod3.c b/REORG.TODO/stdlib/tst-strtod3.c
new file mode 100644
index 0000000000..23abec1896
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-strtod3.c
@@ -0,0 +1,55 @@
+#include <locale.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+static const struct
+{
+  const char *in;
+  const char *out;
+  double expected;
+} tests[] =
+  {
+    { "000,,,e1", ",,,e1", 0.0 },
+    { "000e1", "", 0.0 },
+    { "000,1e1", ",1e1", 0.0 }
+  };
+#define NTESTS (sizeof (tests) / sizeof (tests[0]))
+
+
+static int
+do_test (void)
+{
+  if (setlocale (LC_ALL, "en_US.ISO-8859-1") == NULL)
+    {
+      puts ("could not set locale");
+      return 1;
+    }
+
+  int status = 0;
+
+  for (int i = 0; i < NTESTS; ++i)
+    {
+      char *ep;
+      double r = __strtod_internal (tests[i].in, &ep, 1);
+
+      if (strcmp (ep, tests[i].out) != 0)
+	{
+	  printf ("%d: got rest string \"%s\", expected \"%s\"\n",
+		  i, ep, tests[i].out);
+	  status = 1;
+	}
+
+      if (r != tests[i].expected)
+	{
+	  printf ("%d: got wrong results %g, expected %g\n",
+		  i, r, tests[i].expected);
+	  status = 1;
+	}
+    }
+
+  return status;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-strtod4.c b/REORG.TODO/stdlib/tst-strtod4.c
new file mode 100644
index 0000000000..2d9d54c944
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-strtod4.c
@@ -0,0 +1,56 @@
+#include <locale.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#define NBSP "\xc2\xa0"
+
+static const struct
+{
+  const char *in;
+  const char *out;
+  double expected;
+} tests[] =
+  {
+    { "000"NBSP"000"NBSP"000", "", 0.0 },
+    { "1"NBSP"000"NBSP"000,5x", "x", 1000000.5 }
+  };
+#define NTESTS (sizeof (tests) / sizeof (tests[0]))
+
+
+static int
+do_test (void)
+{
+  if (setlocale (LC_ALL, "cs_CZ.UTF-8") == NULL)
+    {
+      puts ("could not set locale");
+      return 1;
+    }
+
+  int status = 0;
+
+  for (int i = 0; i < NTESTS; ++i)
+    {
+      char *ep;
+      double r = __strtod_internal (tests[i].in, &ep, 1);
+
+      if (strcmp (ep, tests[i].out) != 0)
+	{
+	  printf ("%d: got rest string \"%s\", expected \"%s\"\n",
+		  i, ep, tests[i].out);
+	  status = 1;
+	}
+
+      if (r != tests[i].expected)
+	{
+	  printf ("%d: got wrong results %g, expected %g\n",
+		  i, r, tests[i].expected);
+	  status = 1;
+	}
+    }
+
+  return status;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-strtod5.c b/REORG.TODO/stdlib/tst-strtod5.c
new file mode 100644
index 0000000000..8976e39a58
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-strtod5.c
@@ -0,0 +1,89 @@
+/* Tests of strtod in a locale using decimal comma.
+   Copyright (C) 2007-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <locale.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+
+#define NBSP "\xc2\xa0"
+
+static const struct
+{
+  const char *in;
+  double expected;
+} tests[] =
+  {
+    { "0", 0.0 },
+    { "000", 0.0 },
+    { "-0", -0.0 },
+    { "-000", -0.0 },
+    { "0,", 0.0 },
+    { "-0,", -0.0 },
+    { "0,0", 0.0 },
+    { "-0,0", -0.0 },
+    { "0e-10", 0.0 },
+    { "-0e-10", -0.0 },
+    { "0,e-10", 0.0 },
+    { "-0,e-10", -0.0 },
+    { "0,0e-10", 0.0 },
+    { "-0,0e-10", -0.0 },
+    { "0e-1000000", 0.0 },
+    { "-0e-1000000", -0.0 },
+    { "0,0e-1000000", 0.0 },
+    { "-0,0e-1000000", -0.0 },
+  };
+#define NTESTS (sizeof (tests) / sizeof (tests[0]))
+
+
+static int
+do_test (void)
+{
+  if (setlocale (LC_ALL, "cs_CZ.UTF-8") == NULL)
+    {
+      puts ("could not set locale");
+      return 1;
+    }
+
+  int status = 0;
+
+  for (int i = 0; i < NTESTS; ++i)
+    {
+      char *ep;
+      double r = strtod (tests[i].in, &ep);
+
+      if (*ep != '\0')
+	{
+	  printf ("%d: got rest string \"%s\", expected \"\"\n", i, ep);
+	  status = 1;
+	}
+
+      if (r != tests[i].expected
+	  || copysign (10.0, r) != copysign (10.0, tests[i].expected))
+	{
+	  printf ("%d: got wrong results %g, expected %g\n",
+		  i, r, tests[i].expected);
+	  status = 1;
+	}
+    }
+
+  return status;
+}
+
+#include <support/test-driver.c>
diff --git a/REORG.TODO/stdlib/tst-strtod5i.c b/REORG.TODO/stdlib/tst-strtod5i.c
new file mode 100644
index 0000000000..7e319585bb
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-strtod5i.c
@@ -0,0 +1,100 @@
+/* Tests of __strtod_internal in a locale using decimal comma.
+   Copyright (C) 2007-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <locale.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+
+#define NBSP "\xc2\xa0"
+
+static const struct
+{
+  const char *in;
+  int group;
+  double expected;
+} tests[] =
+  {
+    { "0", 0, 0.0 },
+    { "000", 0, 0.0 },
+    { "-0", 0, -0.0 },
+    { "-000", 0, -0.0 },
+    { "0,", 0, 0.0 },
+    { "-0,", 0, -0.0 },
+    { "0,0", 0, 0.0 },
+    { "-0,0", 0, -0.0 },
+    { "0e-10", 0, 0.0 },
+    { "-0e-10", 0, -0.0 },
+    { "0,e-10", 0, 0.0 },
+    { "-0,e-10", 0, -0.0 },
+    { "0,0e-10", 0, 0.0 },
+    { "-0,0e-10", 0, -0.0 },
+    { "0e-1000000", 0, 0.0 },
+    { "-0e-1000000", 0, -0.0 },
+    { "0,0e-1000000", 0, 0.0 },
+    { "-0,0e-1000000", 0, -0.0 },
+    { "0", 1, 0.0 },
+    { "000", 1, 0.0 },
+    { "-0", 1, -0.0 },
+    { "-000", 1, -0.0 },
+    { "0e-10", 1, 0.0 },
+    { "-0e-10", 1, -0.0 },
+    { "0e-1000000", 1, 0.0 },
+    { "-0e-1000000", 1, -0.0 },
+    { "000"NBSP"000"NBSP"000", 1, 0.0 },
+    { "-000"NBSP"000"NBSP"000", 1, -0.0 }
+  };
+#define NTESTS (sizeof (tests) / sizeof (tests[0]))
+
+
+static int
+do_test (void)
+{
+  if (setlocale (LC_ALL, "cs_CZ.UTF-8") == NULL)
+    {
+      puts ("could not set locale");
+      return 1;
+    }
+
+  int status = 0;
+
+  for (int i = 0; i < NTESTS; ++i)
+    {
+      char *ep;
+      double r = __strtod_internal (tests[i].in, &ep, tests[i].group);
+
+      if (*ep != '\0')
+	{
+	  printf ("%d: got rest string \"%s\", expected \"\"\n", i, ep);
+	  status = 1;
+	}
+
+      if (r != tests[i].expected
+	  || copysign (10.0, r) != copysign (10.0, tests[i].expected))
+	{
+	  printf ("%d: got wrong results %g, expected %g\n",
+		  i, r, tests[i].expected);
+	  status = 1;
+	}
+    }
+
+  return status;
+}
+
+#include <support/test-driver.c>
diff --git a/REORG.TODO/stdlib/tst-strtod6.c b/REORG.TODO/stdlib/tst-strtod6.c
new file mode 100644
index 0000000000..9bfbdc2b38
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-strtod6.c
@@ -0,0 +1,57 @@
+#include <math.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "tst-strtod.h"
+
+#define TEST_STRTOD(FSUF, FTYPE, FTOSTR, LSUF, CSUF)	  \
+static int						  \
+test_strto ## FSUF (const char str[])			  \
+{							  \
+  char *endp;						  \
+  int result = 0;					  \
+  puts (str);						  \
+  FTYPE d = strto ## FSUF (str, &endp);			  \
+  if (!isnan (d))					  \
+    {							  \
+      puts ("strto" #FSUF " did not return NAN");	  \
+      result = 1;					  \
+    }							  \
+  if (issignaling (d))					  \
+    {							  \
+      puts ("strto" #FSUF " returned a sNAN");		  \
+      result = 1;					  \
+    }							  \
+  if (strcmp (endp, "something") != 0)			  \
+    {							  \
+      puts ("strto" #FSUF " set incorrect end pointer");  \
+      result = 1;					  \
+    }							  \
+  return result;					  \
+}
+
+GEN_TEST_STRTOD_FOREACH (TEST_STRTOD);
+
+static int
+do_test (void)
+{
+  int result = 0;
+
+  result |= STRTOD_TEST_FOREACH (test_strto, "NaN(blabla)something");
+  result |= STRTOD_TEST_FOREACH (test_strto, "NaN(1234)something");
+  /* UINT32_MAX.  */
+  result |= STRTOD_TEST_FOREACH (test_strto, "NaN(4294967295)something");
+  /* UINT64_MAX.  */
+  result |= STRTOD_TEST_FOREACH (test_strto,
+				 "NaN(18446744073709551615)something");
+  /* The case of zero is special in that "something" has to be done to make the
+     mantissa different from zero, which would mean infinity instead of
+     NaN.  */
+  result |= STRTOD_TEST_FOREACH (test_strto, "NaN(0)something");
+
+  return result;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-strtol-locale-main.c b/REORG.TODO/stdlib/tst-strtol-locale-main.c
new file mode 100644
index 0000000000..5de61e7b16
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-strtol-locale-main.c
@@ -0,0 +1,87 @@
+/* Test strtol functions work with all ASCII letters in Turkish
+   locales (bug 19242).
+   Copyright (C) 2015-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <locale.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <wchar.h>
+
+#define STR_(X) #X
+#define STR(X) STR_(X)
+#define FNPFXS STR (FNPFX)
+#define CONCAT_(X, Y) X ## Y
+#define CONCAT(X, Y) CONCAT_ (X, Y)
+#define FNX(FN) CONCAT (FNPFX, FN)
+
+#define TEST(LOC, STR, EXP_VAL, FN, TYPE, FMT)				\
+  do									\
+    {									\
+      CHAR *ep;								\
+      TYPE val = FNX (FN) (STR, &ep, 36);				\
+      printf ("%s: " FNPFXS #FN " (" SFMT ") == " FMT "\n", LOC, STR, val); \
+      if (val == (TYPE) (EXP_VAL) && *ep == 0)				\
+	printf ("PASS: %s: " FNPFXS #FN " (" SFMT ")\n", LOC, STR);	\
+      else								\
+	{								\
+	  printf ("FAIL: %s: " FNPFXS #FN " (" SFMT ")\n", LOC, STR);	\
+	  result = 1;							\
+	}								\
+    }									\
+  while (0)
+
+static int
+test_one_locale (const char *loc)
+{
+  if (setlocale (LC_ALL, loc) == NULL)
+    {
+      printf ("setlocale (LC_ALL, \"%s\") failed\n", loc);
+      return 1;
+    }
+  int result = 0;
+  for (int i = 10; i < 36; i++)
+    {
+      CHAR s[2];
+      s[0] = L_('A') + i - 10;
+      s[1] = 0;
+      TEST (loc, s, i, l, long int, "%ld");
+      TEST (loc, s, i, ul, unsigned long int, "%lu");
+      TEST (loc, s, i, ll, long long int, "%lld");
+      TEST (loc, s, i, ull, unsigned long long int, "%llu");
+      s[0] = L_('a') + i - 10;
+      s[1] = 0;
+      TEST (loc, s, i, l, long int, "%ld");
+      TEST (loc, s, i, ul, unsigned long int, "%lu");
+      TEST (loc, s, i, ll, long long int, "%lld");
+      TEST (loc, s, i, ull, unsigned long long int, "%llu");
+    }
+  return result;
+}
+
+static int
+do_test (void)
+{
+  int result = 0;
+  result |= test_one_locale ("C");
+  result |= test_one_locale ("tr_TR.UTF-8");
+  result |= test_one_locale ("tr_TR.ISO-8859-9");
+  return result;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-strtol-locale.c b/REORG.TODO/stdlib/tst-strtol-locale.c
new file mode 100644
index 0000000000..1d5092ba84
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-strtol-locale.c
@@ -0,0 +1,25 @@
+/* Test strtol functions work with all ASCII letters in Turkish
+   locales (bug 19242).  Narrow string version.
+   Copyright (C) 2015-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#define CHAR char
+#define SFMT "\"%s\""
+#define FNPFX strto
+#define L_(C) C
+
+#include <tst-strtol-locale-main.c>
diff --git a/REORG.TODO/stdlib/tst-strtol.c b/REORG.TODO/stdlib/tst-strtol.c
new file mode 100644
index 0000000000..5b80622e07
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-strtol.c
@@ -0,0 +1,626 @@
+/* My bet is this was written by Chris Torek.
+   I reformatted and ansidecl-ized it, and tweaked it a little.  */
+
+#include <ctype.h>
+#include <stdio.h>
+#include <errno.h>
+#include <stdlib.h>
+#include <string.h>
+#include <limits.h>
+
+struct ltest
+  {
+    const char *str;		/* Convert this.  */
+    unsigned long int expect;	/* To get this.  */
+    int base;			/* Use this base.  */
+    char left;			/* With this left over.  */
+    int err;			/* And this in errno.  */
+  };
+static const struct ltest tests[] =
+  {
+  /* First, signed numbers:  */
+  /* simple... */
+  {"123", 123, 0, 0, 0},
+  {"+123", 123, 0, 0, 0},
+  {"  123", 123, 0, 0, 0},
+  {" 123 ", 123, 0, ' ', 0},
+  {"   -17", -17, 0, 0, 0},
+
+  /* implicit base... */
+  {"0123", 0123, 0, 0, 0},
+  {"0123a", 0123, 0, 'a', 0},
+  {"01239", 0123, 0, '9', 0},
+  {"0x123", 0x123, 0, 0, 0},
+  {"-0x123", -0x123, 0, 0, 0},
+  {"0x0xc", 0, 0, 'x', 0},
+  {" +0x123fg", 0x123f, 0, 'g', 0},
+
+  /* explicit base... */
+  {"123", 0x123, 16, 0, 0},
+  {"0x123", 0x123, 16, 0, 0},
+  {"123", 0123, 8, 0, 0},
+  {"0123", 0123, 8, 0, 0},
+  {"0123", 123, 10, 0, 0},
+  {"0x123", 0, 10, 'x', 0},
+
+  /* case insensitivity... */
+  {"abcd", 0xabcd, 16, 0, 0},
+  {"AbCd", 0xabcd, 16, 0, 0},
+  {"0xABCD", 0xabcd, 16, 0, 0},
+  {"0Xabcd", 0xabcd, 16, 0, 0},
+
+  /* odd bases... */
+  {"0xyz", 33 * 35 + 34, 35, 'z', 0},
+  {"yz!", 34 * 36 + 35, 36, '!', 0},
+  {"-yz", -(34*36 + 35), 36, 0, 0},
+  {"GhI4", ((16*20 + 17)*20 + 18)*20 + 4, 20, 0, 0},
+
+  /* extremes... */
+#if LONG_MAX == 0x7fffffff
+  {"2147483647", 2147483647, 0, 0, 0},
+  {"2147483648", 2147483647, 0, 0, ERANGE},
+  {"214748364888", 2147483647, 0, 0, ERANGE},
+  {"2147483650", 2147483647, 0, 0, ERANGE},
+  {"-2147483648", 0x80000000, 0, 0, 0},
+  {"-2147483649", 0x80000000, 0, 0, ERANGE},
+  {"0x1122334455z", 2147483647, 16, 'z', ERANGE},
+
+  {"1111111111111111111111111111111", 2147483647, 2, 0, 0},
+  {"10000000000000000000000000000000", 2147483647, 2, 0, ERANGE},
+  {"12112122212110202101", 2147483647, 3, 0, 0},
+  {"12112122212110202102", 2147483647, 3, 0, ERANGE},
+  {"1333333333333333", 2147483647, 4, 0, 0},
+  {"2000000000000000", 2147483647, 4, 0, ERANGE},
+  {"13344223434042", 2147483647, 5, 0, 0},
+  {"13344223434043", 2147483647, 5, 0, ERANGE},
+  {"553032005531", 2147483647, 6, 0, 0},
+  {"553032005532", 2147483647, 6, 0, ERANGE},
+  {"104134211161", 2147483647, 7, 0, 0},
+  {"104134211162", 2147483647, 7, 0, ERANGE},
+  {"17777777777", 2147483647, 8, 0, 0},
+  {"20000000000", 2147483647, 8, 0, ERANGE},
+  {"5478773671", 2147483647, 9, 0, 0},
+  {"5478773672", 2147483647, 9, 0, ERANGE},
+  {"2147483647", 2147483647, 10, 0, 0},
+  {"2147483648", 2147483647, 10, 0, ERANGE},
+  {"a02220281", 2147483647, 11, 0, 0},
+  {"a02220282", 2147483647, 11, 0, ERANGE},
+  {"4bb2308a7", 2147483647, 12, 0, 0},
+  {"4bb2308a8", 2147483647, 12, 0, ERANGE},
+  {"282ba4aaa", 2147483647, 13, 0, 0},
+  {"282ba4aab", 2147483647, 13, 0, ERANGE},
+  {"1652ca931", 2147483647, 14, 0, 0},
+  {"1652ca932", 2147483647, 14, 0, ERANGE},
+  {"c87e66b7", 2147483647, 15, 0, 0},
+  {"c87e66b8", 2147483647, 15, 0, ERANGE},
+  {"7fffffff", 2147483647, 16, 0, 0},
+  {"80000000", 2147483647, 16, 0, ERANGE},
+  {"53g7f548", 2147483647, 17, 0, 0},
+  {"53g7f549", 2147483647, 17, 0, ERANGE},
+  {"3928g3h1", 2147483647, 18, 0, 0},
+  {"3928g3h2", 2147483647, 18, 0, ERANGE},
+  {"27c57h32", 2147483647, 19, 0, 0},
+  {"27c57h33", 2147483647, 19, 0, ERANGE},
+  {"1db1f927", 2147483647, 20, 0, 0},
+  {"1db1f928", 2147483647, 20, 0, ERANGE},
+  {"140h2d91", 2147483647, 21, 0, 0},
+  {"140h2d92", 2147483647, 21, 0, ERANGE},
+  {"ikf5bf1", 2147483647, 22, 0, 0},
+  {"ikf5bf2", 2147483647, 22, 0, ERANGE},
+  {"ebelf95", 2147483647, 23, 0, 0},
+  {"ebelf96", 2147483647, 23, 0, ERANGE},
+  {"b5gge57", 2147483647, 24, 0, 0},
+  {"b5gge58", 2147483647, 24, 0, ERANGE},
+  {"8jmdnkm", 2147483647, 25, 0, 0},
+  {"8jmdnkn", 2147483647, 25, 0, ERANGE},
+  {"6oj8ion", 2147483647, 26, 0, 0},
+  {"6oj8ioo", 2147483647, 26, 0, ERANGE},
+  {"5ehncka", 2147483647, 27, 0, 0},
+  {"5ehnckb", 2147483647, 27, 0, ERANGE},
+  {"4clm98f", 2147483647, 28, 0, 0},
+  {"4clm98g", 2147483647, 28, 0, ERANGE},
+  {"3hk7987", 2147483647, 29, 0, 0},
+  {"3hk7988", 2147483647, 29, 0, ERANGE},
+  {"2sb6cs7", 2147483647, 30, 0, 0},
+  {"2sb6cs8", 2147483647, 30, 0, ERANGE},
+  {"2d09uc1", 2147483647, 31, 0, 0},
+  {"2d09uc2", 2147483647, 31, 0, ERANGE},
+  {"1vvvvvv", 2147483647, 32, 0, 0},
+  {"2000000", 2147483647, 32, 0, ERANGE},
+  {"1lsqtl1", 2147483647, 33, 0, 0},
+  {"1lsqtl2", 2147483647, 33, 0, ERANGE},
+  {"1d8xqrp", 2147483647, 34, 0, 0},
+  {"1d8xqrq", 2147483647, 34, 0, ERANGE},
+  {"15v22um", 2147483647, 35, 0, 0},
+  {"15v22un", 2147483647, 35, 0, ERANGE},
+  {"zik0zj", 2147483647, 36, 0, 0},
+  {"zik0zk", 2147483647, 36, 0, ERANGE},
+
+  {"-10000000000000000000000000000000", -2147483648, 2, 0, 0},
+  {"-10000000000000000000000000000001", -2147483648, 2, 0, ERANGE},
+  {"-12112122212110202102", -2147483648, 3, 0, 0},
+  {"-12112122212110202110", -2147483648, 3, 0, ERANGE},
+  {"-2000000000000000", -2147483648, 4, 0, 0},
+  {"-2000000000000001", -2147483648, 4, 0, ERANGE},
+  {"-13344223434043", -2147483648, 5, 0, 0},
+  {"-13344223434044", -2147483648, 5, 0, ERANGE},
+  {"-553032005532", -2147483648, 6, 0, 0},
+  {"-553032005533", -2147483648, 6, 0, ERANGE},
+  {"-104134211162", -2147483648, 7, 0, 0},
+  {"-104134211163", -2147483648, 7, 0, ERANGE},
+  {"-20000000000", -2147483648, 8, 0, },
+  {"-20000000001", -2147483648, 8, 0, ERANGE},
+  {"-5478773672", -2147483648, 9, 0, 0},
+  {"-5478773673", -2147483648, 9, 0, ERANGE},
+  {"-2147483648", -2147483648, 10, 0, 0},
+  {"-2147483649", -2147483648, 10, 0, ERANGE},
+  {"-a02220282", -2147483648, 11, 0, 0},
+  {"-a02220283", -2147483648, 11, 0, ERANGE},
+  {"-4bb2308a8", -2147483648, 12, 0, 0},
+  {"-4bb2308a9", -2147483648, 12, 0, ERANGE},
+  {"-282ba4aab", -2147483648, 13, 0, 0},
+  {"-282ba4aac", -2147483648, 13, 0, ERANGE},
+  {"-1652ca932", -2147483648, 14, 0, 0},
+  {"-1652ca933", -2147483648, 14, 0, ERANGE},
+  {"-c87e66b8", -2147483648, 15, 0, 0},
+  {"-c87e66b9", -2147483648, 15, 0, ERANGE},
+  {"-80000000", -2147483648, 16, 0, 0},
+  {"-80000001", -2147483648, 16, 0, ERANGE},
+  {"-53g7f549", -2147483648, 17, 0, 0},
+  {"-53g7f54a", -2147483648, 17, 0, ERANGE},
+  {"-3928g3h2", -2147483648, 18, 0, 0},
+  {"-3928g3h3", -2147483648, 18, 0, ERANGE},
+  {"-27c57h33", -2147483648, 19, 0, 0},
+  {"-27c57h34", -2147483648, 19, 0, ERANGE},
+  {"-1db1f928", -2147483648, 20, 0, 0},
+  {"-1db1f929", -2147483648, 20, 0, ERANGE},
+  {"-140h2d92", -2147483648, 21, 0, 0},
+  {"-140h2d93", -2147483648, 21, 0, ERANGE},
+  {"-ikf5bf2", -2147483648, 22, 0, 0},
+  {"-ikf5bf3", -2147483648, 22, 0, ERANGE},
+  {"-ebelf96", -2147483648, 23, 0, 0},
+  {"-ebelf97", -2147483648, 23, 0, ERANGE},
+  {"-b5gge58", -2147483648, 24, 0, 0},
+  {"-b5gge59", -2147483648, 24, 0, ERANGE},
+  {"-8jmdnkn", -2147483648, 25, 0, 0},
+  {"-8jmdnko", -2147483648, 25, 0, ERANGE},
+  {"-6oj8ioo", -2147483648, 26, 0, 0},
+  {"-6oj8iop", -2147483648, 26, 0, ERANGE},
+  {"-5ehnckb", -2147483648, 27, 0, 0},
+  {"-5ehnckc", -2147483648, 27, 0, ERANGE},
+  {"-4clm98g", -2147483648, 28, 0, 0},
+  {"-4clm98h", -2147483648, 28, 0, ERANGE},
+  {"-3hk7988", -2147483648, 29, 0, 0},
+  {"-3hk7989", -2147483648, 29, 0, ERANGE},
+  {"-2sb6cs8", -2147483648, 30, 0, 0},
+  {"-2sb6cs9", -2147483648, 30, 0, ERANGE},
+  {"-2d09uc2", -2147483648, 31, 0, 0},
+  {"-2d09uc3", -2147483648, 31, 0, ERANGE},
+  {"-2000000", -2147483648, 32, 0, 0},
+  {"-2000001", -2147483648, 32, 0, ERANGE},
+  {"-1lsqtl2", -2147483648, 33, 0, 0},
+  {"-1lsqtl3", -2147483648, 33, 0, ERANGE},
+  {"-1d8xqrq", -2147483648, 34, 0, 0},
+  {"-1d8xqrr", -2147483648, 34, 0, ERANGE},
+  {"-15v22un", -2147483648, 35, 0, 0},
+  {"-15v22uo", -2147483648, 35, 0, ERANGE},
+  {"-zik0zk", -2147483648, 36, 0, 0},
+  {"-zik0zl", -2147483648, 36, 0, ERANGE},
+#else
+  {"9223372036854775807", 9223372036854775807, 0, 0, 0},
+  {"9223372036854775808", 9223372036854775807, 0, 0, ERANGE},
+  {"922337203685477580777", 9223372036854775807, 0, 0, ERANGE},
+  {"9223372036854775810", 9223372036854775807, 0, 0, ERANGE},
+  {"-2147483648", -2147483648, 0, 0, 0},
+  {"-9223372036854775808", 0x8000000000000000, 0, 0, 0},
+  {"-9223372036854775809", 0x8000000000000000, 0, 0, ERANGE},
+  {"0x112233445566778899z", 9223372036854775807, 16, 'z', ERANGE},
+  {"0xFFFFFFFFFFFF00FF" , 9223372036854775807, 0, 0, ERANGE},
+
+  {"111111111111111111111111111111111111111111111111111111111111111",
+   9223372036854775807, 2, 0, 0},
+  {"1000000000000000000000000000000000000000000000000000000000000000",
+   9223372036854775807, 2, 0, ERANGE},
+  {"2021110011022210012102010021220101220221",
+   9223372036854775807, 3, 0, 0},
+  {"2021110011022210012102010021220101220222",
+   9223372036854775807, 3, 0, ERANGE},
+  {"13333333333333333333333333333333", 9223372036854775807, 4, 0, 0},
+  {"20000000000000000000000000000000", 9223372036854775807, 4, 0, ERANGE},
+  {"1104332401304422434310311212", 9223372036854775807, 5, 0, 0},
+  {"1104332401304422434310311213", 9223372036854775807, 5, 0, ERANGE},
+  {"1540241003031030222122211", 9223372036854775807, 6, 0, 0},
+  {"1540241003031030222122212", 9223372036854775807, 6, 0, ERANGE},
+  {"22341010611245052052300", 9223372036854775807, 7, 0, 0},
+  {"22341010611245052052301", 9223372036854775807, 7, 0, ERANGE},
+  {"777777777777777777777", 9223372036854775807, 8, 0, 0},
+  {"1000000000000000000000", 9223372036854775807, 8, 0, ERANGE},
+  {"67404283172107811827", 9223372036854775807, 9, 0, 0},
+  {"67404283172107811828", 9223372036854775807, 9, 0, ERANGE},
+  {"9223372036854775807", 9223372036854775807, 10, 0, 0},
+  {"9223372036854775808", 9223372036854775807, 10, 0, ERANGE},
+  {"1728002635214590697", 9223372036854775807, 11, 0, 0},
+  {"1728002635214590698", 9223372036854775807, 11, 0, ERANGE},
+  {"41a792678515120367", 9223372036854775807, 12, 0, 0},
+  {"41a792678515120368", 9223372036854775807, 12, 0, ERANGE},
+  {"10b269549075433c37", 9223372036854775807, 13, 0, 0},
+  {"10b269549075433c38", 9223372036854775807, 13, 0, ERANGE},
+  {"4340724c6c71dc7a7", 9223372036854775807, 14, 0, 0},
+  {"4340724c6c71dc7a8", 9223372036854775807, 14, 0, ERANGE},
+  {"160e2ad3246366807", 9223372036854775807, 15, 0, 0},
+  {"160e2ad3246366808", 9223372036854775807, 15, 0, ERANGE},
+  {"7fffffffffffffff", 9223372036854775807, 16, 0, 0},
+  {"8000000000000000", 9223372036854775807, 16, 0, ERANGE},
+  {"33d3d8307b214008", 9223372036854775807, 17, 0, 0},
+  {"33d3d8307b214009", 9223372036854775807, 17, 0, ERANGE},
+  {"16agh595df825fa7", 9223372036854775807, 18, 0, 0},
+  {"16agh595df825fa8", 9223372036854775807, 18, 0, ERANGE},
+  {"ba643dci0ffeehh", 9223372036854775807, 19, 0, 0},
+  {"ba643dci0ffeehi", 9223372036854775807, 19, 0, ERANGE},
+  {"5cbfjia3fh26ja7", 9223372036854775807, 20, 0, 0},
+  {"5cbfjia3fh26ja8", 9223372036854775807, 20, 0, ERANGE},
+  {"2heiciiie82dh97", 9223372036854775807, 21, 0, 0},
+  {"2heiciiie82dh98", 9223372036854775807, 21, 0, ERANGE},
+  {"1adaibb21dckfa7", 9223372036854775807, 22, 0, 0},
+  {"1adaibb21dckfa8", 9223372036854775807, 22, 0, ERANGE},
+  {"i6k448cf4192c2", 9223372036854775807, 23, 0, 0},
+  {"i6k448cf4192c3", 9223372036854775807, 23, 0, ERANGE},
+  {"acd772jnc9l0l7", 9223372036854775807, 24, 0, 0},
+  {"acd772jnc9l0l8", 9223372036854775807, 24, 0, ERANGE},
+  {"64ie1focnn5g77", 9223372036854775807, 25, 0, 0},
+  {"64ie1focnn5g78", 9223372036854775807, 25, 0, ERANGE},
+  {"3igoecjbmca687", 9223372036854775807, 26, 0, 0},
+  {"3igoecjbmca688", 9223372036854775807, 26, 0, ERANGE},
+  {"27c48l5b37oaop", 9223372036854775807, 27, 0, 0},
+  {"27c48l5b37oaoq", 9223372036854775807, 27, 0, ERANGE},
+  {"1bk39f3ah3dmq7", 9223372036854775807, 28, 0, 0},
+  {"1bk39f3ah3dmq8", 9223372036854775807, 28, 0, ERANGE},
+  {"q1se8f0m04isb", 9223372036854775807, 29, 0, 0},
+  {"q1se8f0m04isc", 9223372036854775807, 29, 0, ERANGE},
+  {"hajppbc1fc207", 9223372036854775807, 30, 0, 0},
+  {"hajppbc1fc208", 9223372036854775807, 30, 0, ERANGE},
+  {"bm03i95hia437", 9223372036854775807, 31, 0, 0},
+  {"bm03i95hia438", 9223372036854775807, 31, 0, ERANGE},
+  {"7vvvvvvvvvvvv", 9223372036854775807, 32, 0, 0},
+  {"8000000000000", 9223372036854775807, 32, 0, ERANGE},
+  {"5hg4ck9jd4u37", 9223372036854775807, 33, 0, 0},
+  {"5hg4ck9jd4u38", 9223372036854775807, 33, 0, ERANGE},
+  {"3tdtk1v8j6tpp", 9223372036854775807, 34, 0, 0},
+  {"3tdtk1v8j6tpq", 9223372036854775807, 34, 0, ERANGE},
+  {"2pijmikexrxp7", 9223372036854775807, 35, 0, 0},
+  {"2pijmikexrxp8", 9223372036854775807, 35, 0, ERANGE},
+  {"1y2p0ij32e8e7", 9223372036854775807, 36, 0, 0},
+  {"1y2p0ij32e8e8", 9223372036854775807, 36, 0, ERANGE},
+
+  {"-1000000000000000000000000000000000000000000000000000000000000000",
+   -9223372036854775808ull, 2, 0, 0},
+  {"-1000000000000000000000000000000000000000000000000000000000000001",
+   -9223372036854775808ull, 2, 0, ERANGE},
+  {"-2021110011022210012102010021220101220222",
+   -9223372036854775808ull, 3, 0, 0},
+  {"-2021110011022210012102010021220101221000",
+   -9223372036854775808ull, 3, 0, ERANGE},
+  {"-20000000000000000000000000000000", -9223372036854775808ull, 4, 0, 0},
+  {"-20000000000000000000000000000001", -9223372036854775808ull, 4, 0, ERANGE},
+  {"-1104332401304422434310311213", -9223372036854775808ull, 5, 0, 0},
+  {"-1104332401304422434310311214", -9223372036854775808ull, 5, 0, ERANGE},
+  {"-1540241003031030222122212", -9223372036854775808ull, 6, 0, 0},
+  {"-1540241003031030222122213", -9223372036854775808ull, 6, 0, ERANGE},
+  {"-22341010611245052052301", -9223372036854775808ull, 7, 0, 0},
+  {"-22341010611245052052302", -9223372036854775808ull, 7, 0, ERANGE},
+  {"-1000000000000000000000", -9223372036854775808ull, 8, 0, 0},
+  {"-1000000000000000000001", -9223372036854775808ull, 8, 0, ERANGE},
+  {"-67404283172107811828", -9223372036854775808ull, 9, 0, 0},
+  {"-67404283172107811830", -9223372036854775808ull, 9, 0, ERANGE},
+  {"-9223372036854775808", -9223372036854775808ull, 10, 0, 0},
+  {"-9223372036854775809", -9223372036854775808ull, 10, 0, ERANGE},
+  {"-1728002635214590698", -9223372036854775808ull, 11, 0, 0},
+  {"-1728002635214590699", -9223372036854775808ull, 11, 0, ERANGE},
+  {"-41a792678515120368", -9223372036854775808ull, 12, 0, 0},
+  {"-41a792678515120369", -9223372036854775808ull, 12, 0, ERANGE},
+  {"-10b269549075433c38", -9223372036854775808ull, 13, 0, 0},
+  {"-10b269549075433c39", -9223372036854775808ull, 13, 0, ERANGE},
+  {"-4340724c6c71dc7a8", -9223372036854775808ull, 14, 0, 0},
+  {"-4340724c6c71dc7a9", -9223372036854775808ull, 14, 0, ERANGE},
+  {"-160e2ad3246366808", -9223372036854775808ull, 15, 0, 0},
+  {"-160e2ad3246366809", -9223372036854775808ull, 15, 0, ERANGE},
+  {"-8000000000000000", -9223372036854775808ull, 16, 0, 0},
+  {"-8000000000000001", -9223372036854775808ull, 16, 0, ERANGE},
+  {"-33d3d8307b214009", -9223372036854775808ull, 17, 0, 0},
+  {"-33d3d8307b21400a", -9223372036854775808ull, 17, 0, ERANGE},
+  {"-16agh595df825fa8", -9223372036854775808ull, 18, 0, 0},
+  {"-16agh595df825fa9", -9223372036854775808ull, 18, 0, ERANGE},
+  {"-ba643dci0ffeehi", -9223372036854775808ull, 19, 0, 0},
+  {"-ba643dci0ffeei0", -9223372036854775808ull, 19, 0, ERANGE},
+  {"-5cbfjia3fh26ja8", -9223372036854775808ull, 20, 0, 0},
+  {"-5cbfjia3fh26ja9", -9223372036854775808ull, 20, 0, ERANGE},
+  {"-2heiciiie82dh98", -9223372036854775808ull, 21, 0, 0},
+  {"-2heiciiie82dh99", -9223372036854775808ull, 21, 0, ERANGE},
+  {"-1adaibb21dckfa8", -9223372036854775808ull, 22, 0, 0},
+  {"-1adaibb21dckfa9", -9223372036854775808ull, 22, 0, ERANGE},
+  {"-i6k448cf4192c3", -9223372036854775808ull, 23, 0, 0},
+  {"-i6k448cf4192c4", -9223372036854775808ull, 23, 0, ERANGE},
+  {"-acd772jnc9l0l8", -9223372036854775808ull, 24, 0, 0},
+  {"-acd772jnc9l0l9", -9223372036854775808ull, 24, 0, ERANGE},
+  {"-64ie1focnn5g78", -9223372036854775808ull, 25, 0, 0},
+  {"-64ie1focnn5g79", -9223372036854775808ull, 25, 0, ERANGE},
+  {"-3igoecjbmca688", -9223372036854775808ull, 26, 0, 0},
+  {"-3igoecjbmca689", -9223372036854775808ull, 26, 0, ERANGE},
+  {"-27c48l5b37oaoq", -9223372036854775808ull, 27, 0, 0},
+  {"-27c48l5b37oap0", -9223372036854775808ull, 27, 0, ERANGE},
+  {"-1bk39f3ah3dmq8", -9223372036854775808ull, 28, 0, 0},
+  {"-1bk39f3ah3dmq9", -9223372036854775808ull, 28, 0, ERANGE},
+  {"-q1se8f0m04isc", -9223372036854775808ull, 29, 0, 0},
+  {"-q1se8f0m04isd", -9223372036854775808ull, 29, 0, ERANGE},
+  {"-hajppbc1fc208", -9223372036854775808ull, 30, 0, 0},
+  {"-hajppbc1fc209", -9223372036854775808ull, 30, 0, ERANGE},
+  {"-bm03i95hia438", -9223372036854775808ull, 31, 0, 0},
+  {"-bm03i95hia439", -9223372036854775808ull, 31, 0, ERANGE},
+  {"-8000000000000", -9223372036854775808ull, 32, 0, 0},
+  {"-8000000000001", -9223372036854775808ull, 32, 0, ERANGE},
+  {"-5hg4ck9jd4u38", -9223372036854775808ull, 33, 0, 0},
+  {"-5hg4ck9jd4u39", -9223372036854775808ull, 33, 0, ERANGE},
+  {"-3tdtk1v8j6tpq", -9223372036854775808ull, 34, 0, 0},
+  {"-3tdtk1v8j6tpr", -9223372036854775808ull, 34, 0, ERANGE},
+  {"-2pijmikexrxp8", -9223372036854775808ull, 35, 0, 0},
+  {"-2pijmikexrxp9", -9223372036854775808ull, 35, 0, ERANGE},
+  {"-1y2p0ij32e8e8", -9223372036854775808ull, 36, 0, 0},
+  {"-1y2p0ij32e8e9", -9223372036854775808ull, 36, 0, ERANGE},
+#endif
+  {NULL, 0, 0, 0, 0},
+
+  /* Then unsigned.  */
+  {"  0", 0, 0, 0, 0},
+  {"0xffffffffg", 0xffffffff, 0, 'g', 0},
+#if LONG_MAX == 0x7fffffff
+  {"-0xfedcba98", 0x01234568, 0, 0, 0},
+  {"0xf1f2f3f4f5", 0xffffffff, 0, 0, ERANGE},
+  {"-0x123456789", 0xffffffff, 0, 0, ERANGE},
+
+  {"11111111111111111111111111111111", 0xffffffff, 2, 0, 0},
+  {"100000000000000000000000000000000", 0xffffffff, 2, 0, ERANGE},
+  {"102002022201221111210", 0xffffffff, 3, 0, 0},
+  {"102002022201221111211", 0xffffffff, 3, 0, ERANGE},
+  {"3333333333333333", 0xffffffff, 4, 0, 0},
+  {"10000000000000000", 0xffffffff, 4, 0, ERANGE},
+  {"32244002423140", 0xffffffff, 5, 0, 0},
+  {"32244002423141", 0xffffffff, 5, 0, ERANGE},
+  {"1550104015503", 0xffffffff, 6, 0, 0},
+  {"1550104015504", 0xffffffff, 6, 0, ERANGE},
+  {"211301422353", 0xffffffff, 7, 0, 0},
+  {"211301422354", 0xffffffff, 7, 0, ERANGE},
+  {"37777777777", 0xffffffff, 8, 0, 0},
+  {"40000000000", 0xffffffff, 8, 0, ERANGE},
+  {"12068657453", 0xffffffff, 9, 0, 0},
+  {"12068657454", 0xffffffff, 9, 0, ERANGE},
+  {"4294967295", 0xffffffff, 10, 0, 0},
+  {"4294967296", 0xffffffff, 10, 0, ERANGE},
+  {"1904440553", 0xffffffff, 11, 0, 0},
+  {"1904440554", 0xffffffff, 11, 0, ERANGE},
+  {"9ba461593", 0xffffffff, 12, 0, 0},
+  {"9ba461594", 0xffffffff, 12, 0, ERANGE},
+  {"535a79888", 0xffffffff, 13, 0, 0},
+  {"535a79889", 0xffffffff, 13, 0, ERANGE},
+  {"2ca5b7463", 0xffffffff, 14, 0, 0},
+  {"2ca5b7464", 0xffffffff, 14, 0, ERANGE},
+  {"1a20dcd80", 0xffffffff, 15, 0, 0},
+  {"1a20dcd81", 0xffffffff, 15, 0, ERANGE},
+  {"ffffffff", 0xffffffff, 16, 0, 0},
+  {"100000000", 0xffffffff, 16, 0, ERANGE},
+  {"a7ffda90", 0xffffffff, 17, 0, 0},
+  {"a7ffda91", 0xffffffff, 17, 0, ERANGE},
+  {"704he7g3", 0xffffffff, 18, 0, 0},
+  {"704he7g4", 0xffffffff, 18, 0, ERANGE},
+  {"4f5aff65", 0xffffffff, 19, 0, 0},
+  {"4f5aff66", 0xffffffff, 19, 0, ERANGE},
+  {"3723ai4f", 0xffffffff, 20, 0, 0},
+  {"3723ai4g", 0xffffffff, 20, 0, ERANGE},
+  {"281d55i3", 0xffffffff, 21, 0, 0},
+  {"281d55i4", 0xffffffff, 21, 0, ERANGE},
+  {"1fj8b183", 0xffffffff, 22, 0, 0},
+  {"1fj8b184", 0xffffffff, 22, 0, ERANGE},
+  {"1606k7ib", 0xffffffff, 23, 0, 0},
+  {"1606k7ic", 0xffffffff, 23, 0, ERANGE},
+  {"mb994af", 0xffffffff, 24, 0, 0},
+  {"mb994ag", 0xffffffff, 24, 0, ERANGE},
+  {"hek2mgk", 0xffffffff, 25, 0, 0},
+  {"hek2mgl", 0xffffffff, 25, 0, ERANGE},
+  {"dnchbnl", 0xffffffff, 26, 0, 0},
+  {"dnchbnm", 0xffffffff, 26, 0, ERANGE},
+  {"b28jpdl", 0xffffffff, 27, 0, 0},
+  {"b28jpdm", 0xffffffff, 27, 0, ERANGE},
+  {"8pfgih3", 0xffffffff, 28, 0, 0},
+  {"8pfgih4", 0xffffffff, 28, 0, ERANGE},
+  {"76beigf", 0xffffffff, 29, 0, 0},
+  {"76beigg", 0xffffffff, 29, 0, ERANGE},
+  {"5qmcpqf", 0xffffffff, 30, 0, 0},
+  {"5qmcpqg", 0xffffffff, 30, 0, ERANGE},
+  {"4q0jto3", 0xffffffff, 31, 0, 0},
+  {"4q0jto4", 0xffffffff, 31, 0, ERANGE},
+  {"3vvvvvv", 0xffffffff, 32, 0, 0},
+  {"4000000", 0xffffffff, 32, 0, ERANGE},
+  {"3aokq93", 0xffffffff, 33, 0, 0},
+  {"3aokq94", 0xffffffff, 33, 0, ERANGE},
+  {"2qhxjlh", 0xffffffff, 34, 0, 0},
+  {"2qhxjli", 0xffffffff, 34, 0, ERANGE},
+  {"2br45qa", 0xffffffff, 35, 0, 0},
+  {"2br45qb", 0xffffffff, 35, 0, ERANGE},
+  {"1z141z3", 0xffffffff, 36, 0, 0},
+  {"1z141z4", 0xffffffff, 36, 0, ERANGE},
+#else
+  {"0xffffffffffffffffg", 0xffffffffffffffff, 0, 'g', 0},
+  {"-0xfedcba987654321", 0xf0123456789abcdf, 0, 0, 0},
+  {"0xf1f2f3f4f5f6f7f8f9", 0xffffffffffffffff, 0, 0, ERANGE},
+  {"-0x123456789abcdef01", 0xffffffffffffffff, 0, 0, ERANGE},
+
+  {"1111111111111111111111111111111111111111111111111111111111111111",
+   0xffffffffffffffff, 2, 0, 0},
+  {"10000000000000000000000000000000000000000000000000000000000000000",
+   0xffffffffffffffff, 2, 0, ERANGE},
+  {"11112220022122120101211020120210210211220",
+   0xffffffffffffffff, 3, 0, 0},
+  {"11112220022122120101211020120210210211221",
+   0xffffffffffffffff, 3, 0, ERANGE},
+  {"33333333333333333333333333333333", 0xffffffffffffffff, 4, 0, 0},
+  {"100000000000000000000000000000000", 0xffffffffffffffff, 4, 0, ERANGE},
+  {"2214220303114400424121122430", 0xffffffffffffffff, 5, 0, 0},
+  {"2214220303114400424121122431", 0xffffffffffffffff, 5, 0, ERANGE},
+  {"3520522010102100444244423", 0xffffffffffffffff, 6, 0, 0},
+  {"3520522010102100444244424", 0xffffffffffffffff, 6, 0, ERANGE},
+  {"45012021522523134134601", 0xffffffffffffffff, 7, 0, 0},
+  {"45012021522523134134602", 0xffffffffffffffff, 7, 0, ERANGE},
+  {"1777777777777777777777", 0xffffffffffffffff, 8, 0, 0},
+  {"2000000000000000000000", 0xffffffffffffffff, 8, 0, ERANGE},
+  {"145808576354216723756", 0xffffffffffffffff, 9, 0, 0},
+  {"145808576354216723757", 0xffffffffffffffff, 9, 0, ERANGE},
+  {"18446744073709551615", 0xffffffffffffffff, 10, 0, 0},
+  {"18446744073709551616", 0xffffffffffffffff, 10, 0, ERANGE},
+  {"335500516a429071284", 0xffffffffffffffff, 11, 0, 0},
+  {"335500516a429071285", 0xffffffffffffffff, 11, 0, ERANGE},
+  {"839365134a2a240713", 0xffffffffffffffff, 12, 0, 0},
+  {"839365134a2a240714", 0xffffffffffffffff, 12, 0, ERANGE},
+  {"219505a9511a867b72", 0xffffffffffffffff, 13, 0, 0},
+  {"219505a9511a867b73", 0xffffffffffffffff, 13, 0, ERANGE},
+  {"8681049adb03db171", 0xffffffffffffffff, 14, 0, 0},
+  {"8681049adb03db172", 0xffffffffffffffff, 14, 0, ERANGE},
+  {"2c1d56b648c6cd110", 0xffffffffffffffff, 15, 0, 0},
+  {"2c1d56b648c6cd111", 0xffffffffffffffff, 15, 0, ERANGE},
+  {"ffffffffffffffff", 0xffffffffffffffff, 16, 0, 0},
+  {"10000000000000000", 0xffffffffffffffff, 16, 0, ERANGE},
+  {"67979g60f5428010", 0xffffffffffffffff, 17, 0, 0},
+  {"67979g60f5428011", 0xffffffffffffffff, 17, 0, ERANGE},
+  {"2d3fgb0b9cg4bd2f", 0xffffffffffffffff, 18, 0, 0},
+  {"2d3fgb0b9cg4bd2g", 0xffffffffffffffff, 18, 0, ERANGE},
+  {"141c8786h1ccaagg", 0xffffffffffffffff, 19, 0, 0},
+  {"141c8786h1ccaagh", 0xffffffffffffffff, 19, 0, ERANGE},
+  {"b53bjh07be4dj0f", 0xffffffffffffffff, 20, 0, 0},
+  {"b53bjh07be4dj0g", 0xffffffffffffffff, 20, 0, ERANGE},
+  {"5e8g4ggg7g56dif", 0xffffffffffffffff, 21, 0, 0},
+  {"5e8g4ggg7g56dig", 0xffffffffffffffff, 21, 0, ERANGE},
+  {"2l4lf104353j8kf", 0xffffffffffffffff, 22, 0, 0},
+  {"2l4lf104353j8kg", 0xffffffffffffffff, 22, 0, ERANGE},
+  {"1ddh88h2782i515", 0xffffffffffffffff, 23, 0, 0},
+  {"1ddh88h2782i516", 0xffffffffffffffff, 23, 0, ERANGE},
+  {"l12ee5fn0ji1if", 0xffffffffffffffff, 24, 0, 0},
+  {"l12ee5fn0ji1ig", 0xffffffffffffffff, 24, 0, ERANGE},
+  {"c9c336o0mlb7ef", 0xffffffffffffffff, 25, 0, 0},
+  {"c9c336o0mlb7eg", 0xffffffffffffffff, 25, 0, ERANGE},
+  {"7b7n2pcniokcgf", 0xffffffffffffffff, 26, 0, 0},
+  {"7b7n2pcniokcgg", 0xffffffffffffffff, 26, 0, ERANGE},
+  {"4eo8hfam6fllmo", 0xffffffffffffffff, 27, 0, 0},
+  {"4eo8hfam6fllmp", 0xffffffffffffffff, 27, 0, ERANGE},
+  {"2nc6j26l66rhof", 0xffffffffffffffff, 28, 0, 0},
+  {"2nc6j26l66rhog", 0xffffffffffffffff, 28, 0, ERANGE},
+  {"1n3rsh11f098rn", 0xffffffffffffffff, 29, 0, 0},
+  {"1n3rsh11f098ro", 0xffffffffffffffff, 29, 0, ERANGE},
+  {"14l9lkmo30o40f", 0xffffffffffffffff, 30, 0, 0},
+  {"14l9lkmo30o40g", 0xffffffffffffffff, 30, 0, ERANGE},
+  {"nd075ib45k86f", 0xffffffffffffffff, 31, 0, 0},
+  {"nd075ib45k86g", 0xffffffffffffffff, 31, 0, ERANGE},
+  {"fvvvvvvvvvvvv", 0xffffffffffffffff, 32, 0, 0},
+  {"g000000000000", 0xffffffffffffffff, 32, 0, ERANGE},
+  {"b1w8p7j5q9r6f", 0xffffffffffffffff, 33, 0, 0},
+  {"b1w8p7j5q9r6g", 0xffffffffffffffff, 33, 0, ERANGE},
+  {"7orp63sh4dphh", 0xffffffffffffffff, 34, 0, 0},
+  {"7orp63sh4dphi", 0xffffffffffffffff, 34, 0, ERANGE},
+  {"5g24a25twkwff", 0xffffffffffffffff, 35, 0, 0},
+  {"5g24a25twkwfg", 0xffffffffffffffff, 35, 0, ERANGE},
+  {"3w5e11264sgsf", 0xffffffffffffffff, 36, 0, 0},
+  {"3w5e11264sgsg", 0xffffffffffffffff, 36, 0, ERANGE},
+#endif
+  {NULL, 0, 0, 0, 0},
+  };
+
+/* Prototypes for local functions.  */
+static void expand (char *dst, int c);
+
+static int
+do_test (void)
+{
+  const struct ltest *lt;
+  char *ep;
+  int status = 0;
+  int save_errno;
+
+  for (lt = tests; lt->str != NULL; ++lt)
+    {
+      long int l;
+
+      errno = 0;
+      l = strtol (lt->str, &ep, lt->base);
+      save_errno = errno;
+      printf ("strtol(\"%s\", , %d) test %u",
+	      lt->str, lt->base, (unsigned int) (lt - tests));
+      if (l == (long int) lt->expect && *ep == lt->left
+	  && save_errno == lt->err)
+	puts("\tOK");
+      else
+	{
+	  puts("\tBAD");
+	  if (l != (long int) lt->expect)
+	    printf("  returns %ld, expected %ld\n",
+		   l, (long int) lt->expect);
+	  if (lt->left != *ep)
+	    {
+	      char exp1[5], exp2[5];
+	      expand (exp1, *ep);
+	      expand (exp2, lt->left);
+	      printf ("  leaves '%s', expected '%s'\n", exp1, exp2);
+	    }
+	  if (save_errno != lt->err)
+	    printf ("  errno %d (%s)  instead of %d (%s)\n",
+		    save_errno, strerror (save_errno),
+		    lt->err, strerror (lt->err));
+	  status = 1;
+	}
+    }
+
+  for (++lt; lt->str != NULL; lt++)
+    {
+      unsigned long int ul;
+
+      errno = 0;
+      ul = strtoul (lt->str, &ep, lt->base);
+      save_errno = errno;
+      printf ("strtoul(\"%s\", , %d) test %u",
+	      lt->str, lt->base, (unsigned int) (lt - tests));
+      if (ul == lt->expect && *ep == lt->left && save_errno == lt->err)
+	puts("\tOK");
+      else
+	{
+	  puts ("\tBAD");
+	  if (ul != lt->expect)
+	    printf ("  returns %lu, expected %lu\n",
+		    ul, lt->expect);
+	  if (lt->left != *ep)
+	    {
+	      char exp1[5], exp2[5];
+	      expand (exp1, *ep);
+	      expand (exp2, lt->left);
+	      printf ("  leaves '%s', expected '%s'\n", exp1, exp2);
+	    }
+	  if (save_errno != lt->err)
+	    printf ("  errno %d (%s) instead of %d (%s)\n",
+		    save_errno, strerror (save_errno),
+		    lt->err, strerror (lt->err));
+	  status = 1;
+	}
+    }
+
+  return status ? EXIT_FAILURE : EXIT_SUCCESS;
+}
+
+static void
+expand (char *dst, int c)
+{
+  if (isprint (c))
+    {
+      dst[0] = c;
+      dst[1] = '\0';
+    }
+  else
+    (void) sprintf (dst, "%#.3o", (unsigned int) c);
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-strtoll.c b/REORG.TODO/stdlib/tst-strtoll.c
new file mode 100644
index 0000000000..de39ee3a5e
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-strtoll.c
@@ -0,0 +1,401 @@
+/* My bet is this was written by Chris Torek.
+   I reformatted and ansidecl-ized it, and tweaked it a little.  */
+
+#include <ctype.h>
+#include <stdio.h>
+#include <errno.h>
+#include <stdlib.h>
+#include <string.h>
+#include <limits.h>
+
+struct ltest
+  {
+    const char *str;		/* Convert this.  */
+    unsigned long long int expect;	/* To get this.  */
+    int base;			/* Use this base.  */
+    char left;			/* With this left over.  */
+    int err;			/* And this in errno.  */
+  };
+static const struct ltest tests[] =
+  {
+  /* First, signed numbers:  */
+  /* simple... */
+  {"123", 123, 0, 0, 0},
+  {"+123", 123, 0, 0, 0},
+  {"  123", 123, 0, 0, 0},
+  {" 123 ", 123, 0, ' ', 0},
+  {"   -17", -17, 0, 0, 0},
+
+  /* implicit base... */
+  {"0123", 0123, 0, 0, 0},
+  {"0123a", 0123, 0, 'a', 0},
+  {"01239", 0123, 0, '9', 0},
+  {"0x123", 0x123, 0, 0, 0},
+  {"-0x123", -0x123, 0, 0, 0},
+  {"0x0xc", 0, 0, 'x', 0},
+  {" +0x123fg", 0x123f, 0, 'g', 0},
+
+  /* explicit base... */
+  {"123", 0x123, 16, 0, 0},
+  {"0x123", 0x123, 16, 0, 0},
+  {"123", 0123, 8, 0, 0},
+  {"0123", 0123, 8, 0, 0},
+  {"0123", 123, 10, 0, 0},
+  {"0x123", 0, 10, 'x', 0},
+
+  /* case insensitivity... */
+  {"abcd", 0xabcd, 16, 0, 0},
+  {"AbCd", 0xabcd, 16, 0, 0},
+  {"0xABCD", 0xabcd, 16, 0, 0},
+  {"0Xabcd", 0xabcd, 16, 0, 0},
+
+  /* odd bases... */
+  {"0xyz", 33 * 35 + 34, 35, 'z', 0},
+  {"yz!", 34 * 36 + 35, 36, '!', 0},
+  {"-yz", -(34*36 + 35), 36, 0, 0},
+  {"GhI4", ((16*20 + 17)*20 + 18)*20 + 4, 20, 0, 0},
+
+  /* special case for the 32-bit version of strtoll,
+     from a ncftp configure test */
+  {"99000000001", 1000000000ll * 99ll + 1ll, 0, 0},
+
+  /* extremes... */
+  {"9223372036854775807", 9223372036854775807ll, 0, 0, 0},
+  {"9223372036854775808", 9223372036854775807ll, 0, 0, ERANGE},
+  {"922337203685477580777", 9223372036854775807ll, 0, 0, ERANGE},
+  {"9223372036854775810", 9223372036854775807ll, 0, 0, ERANGE},
+  {"-2147483648", -2147483648ll, 0, 0, 0},
+  {"-9223372036854775808", -9223372036854775807ll - 1, 0, 0, 0},
+  {"-9223372036854775809", -9223372036854775807ll - 1, 0, 0, ERANGE},
+  {"0x112233445566778899z", 9223372036854775807ll, 16, 'z', ERANGE},
+  {"0xFFFFFFFFFFFF00FF" , 9223372036854775807ll, 0, 0, ERANGE},
+
+  {"111111111111111111111111111111111111111111111111111111111111111",
+   9223372036854775807ll, 2, 0, 0},
+  {"1000000000000000000000000000000000000000000000000000000000000000",
+   9223372036854775807ll, 2, 0, ERANGE},
+  {"2021110011022210012102010021220101220221",
+   9223372036854775807ll, 3, 0, 0},
+  {"2021110011022210012102010021220101220222",
+   9223372036854775807ll, 3, 0, ERANGE},
+  {"13333333333333333333333333333333", 9223372036854775807ll, 4, 0, 0},
+  {"20000000000000000000000000000000", 9223372036854775807ll, 4, 0, ERANGE},
+  {"1104332401304422434310311212", 9223372036854775807ll, 5, 0, 0},
+  {"1104332401304422434310311213", 9223372036854775807ll, 5, 0, ERANGE},
+  {"1540241003031030222122211", 9223372036854775807ll, 6, 0, 0},
+  {"1540241003031030222122212", 9223372036854775807ll, 6, 0, ERANGE},
+  {"22341010611245052052300", 9223372036854775807ll, 7, 0, 0},
+  {"22341010611245052052301", 9223372036854775807ll, 7, 0, ERANGE},
+  {"777777777777777777777", 9223372036854775807ll, 8, 0, 0},
+  {"1000000000000000000000", 9223372036854775807ll, 8, 0, ERANGE},
+  {"67404283172107811827", 9223372036854775807ll, 9, 0, 0},
+  {"67404283172107811828", 9223372036854775807ll, 9, 0, ERANGE},
+  {"9223372036854775807", 9223372036854775807ll, 10, 0, 0},
+  {"9223372036854775808", 9223372036854775807ll, 10, 0, ERANGE},
+  {"1728002635214590697", 9223372036854775807ll, 11, 0, 0},
+  {"1728002635214590698", 9223372036854775807ll, 11, 0, ERANGE},
+  {"41a792678515120367", 9223372036854775807ll, 12, 0, 0},
+  {"41a792678515120368", 9223372036854775807ll, 12, 0, ERANGE},
+  {"10b269549075433c37", 9223372036854775807ll, 13, 0, 0},
+  {"10b269549075433c38", 9223372036854775807ll, 13, 0, ERANGE},
+  {"4340724c6c71dc7a7", 9223372036854775807ll, 14, 0, 0},
+  {"4340724c6c71dc7a8", 9223372036854775807ll, 14, 0, ERANGE},
+  {"160e2ad3246366807", 9223372036854775807ll, 15, 0, 0},
+  {"160e2ad3246366808", 9223372036854775807ll, 15, 0, ERANGE},
+  {"7fffffffffffffff", 9223372036854775807ll, 16, 0, 0},
+  {"8000000000000000", 9223372036854775807ll, 16, 0, ERANGE},
+  {"33d3d8307b214008", 9223372036854775807ll, 17, 0, 0},
+  {"33d3d8307b214009", 9223372036854775807ll, 17, 0, ERANGE},
+  {"16agh595df825fa7", 9223372036854775807ll, 18, 0, 0},
+  {"16agh595df825fa8", 9223372036854775807ll, 18, 0, ERANGE},
+  {"ba643dci0ffeehh", 9223372036854775807ll, 19, 0, 0},
+  {"ba643dci0ffeehi", 9223372036854775807ll, 19, 0, ERANGE},
+  {"5cbfjia3fh26ja7", 9223372036854775807ll, 20, 0, 0},
+  {"5cbfjia3fh26ja8", 9223372036854775807ll, 20, 0, ERANGE},
+  {"2heiciiie82dh97", 9223372036854775807ll, 21, 0, 0},
+  {"2heiciiie82dh98", 9223372036854775807ll, 21, 0, ERANGE},
+  {"1adaibb21dckfa7", 9223372036854775807ll, 22, 0, 0},
+  {"1adaibb21dckfa8", 9223372036854775807ll, 22, 0, ERANGE},
+  {"i6k448cf4192c2", 9223372036854775807ll, 23, 0, 0},
+  {"i6k448cf4192c3", 9223372036854775807ll, 23, 0, ERANGE},
+  {"acd772jnc9l0l7", 9223372036854775807ll, 24, 0, 0},
+  {"acd772jnc9l0l8", 9223372036854775807ll, 24, 0, ERANGE},
+  {"64ie1focnn5g77", 9223372036854775807ll, 25, 0, 0},
+  {"64ie1focnn5g78", 9223372036854775807ll, 25, 0, ERANGE},
+  {"3igoecjbmca687", 9223372036854775807ll, 26, 0, 0},
+  {"3igoecjbmca688", 9223372036854775807ll, 26, 0, ERANGE},
+  {"27c48l5b37oaop", 9223372036854775807ll, 27, 0, 0},
+  {"27c48l5b37oaoq", 9223372036854775807ll, 27, 0, ERANGE},
+  {"1bk39f3ah3dmq7", 9223372036854775807ll, 28, 0, 0},
+  {"1bk39f3ah3dmq8", 9223372036854775807ll, 28, 0, ERANGE},
+  {"q1se8f0m04isb", 9223372036854775807ll, 29, 0, 0},
+  {"q1se8f0m04isc", 9223372036854775807ll, 29, 0, ERANGE},
+  {"hajppbc1fc207", 9223372036854775807ll, 30, 0, 0},
+  {"hajppbc1fc208", 9223372036854775807ll, 30, 0, ERANGE},
+  {"bm03i95hia437", 9223372036854775807ll, 31, 0, 0},
+  {"bm03i95hia438", 9223372036854775807ll, 31, 0, ERANGE},
+  {"7vvvvvvvvvvvv", 9223372036854775807ll, 32, 0, 0},
+  {"8000000000000", 9223372036854775807ll, 32, 0, ERANGE},
+  {"5hg4ck9jd4u37", 9223372036854775807ll, 33, 0, 0},
+  {"5hg4ck9jd4u38", 9223372036854775807ll, 33, 0, ERANGE},
+  {"3tdtk1v8j6tpp", 9223372036854775807ll, 34, 0, 0},
+  {"3tdtk1v8j6tpq", 9223372036854775807ll, 34, 0, ERANGE},
+  {"2pijmikexrxp7", 9223372036854775807ll, 35, 0, 0},
+  {"2pijmikexrxp8", 9223372036854775807ll, 35, 0, ERANGE},
+  {"1y2p0ij32e8e7", 9223372036854775807ll, 36, 0, 0},
+  {"1y2p0ij32e8e8", 9223372036854775807ll, 36, 0, ERANGE},
+
+  {"-1000000000000000000000000000000000000000000000000000000000000000",
+   -9223372036854775808ull, 2, 0, 0},
+  {"-1000000000000000000000000000000000000000000000000000000000000001",
+   -9223372036854775808ull, 2, 0, ERANGE},
+  {"-2021110011022210012102010021220101220222",
+   -9223372036854775808ull, 3, 0, 0},
+  {"-2021110011022210012102010021220101221000",
+   -9223372036854775808ull, 3, 0, ERANGE},
+  {"-20000000000000000000000000000000", -9223372036854775808ull, 4, 0, 0},
+  {"-20000000000000000000000000000001", -9223372036854775808ull, 4, 0, ERANGE},
+  {"-1104332401304422434310311213", -9223372036854775808ull, 5, 0, 0},
+  {"-1104332401304422434310311214", -9223372036854775808ull, 5, 0, ERANGE},
+  {"-1540241003031030222122212", -9223372036854775808ull, 6, 0, 0},
+  {"-1540241003031030222122213", -9223372036854775808ull, 6, 0, ERANGE},
+  {"-22341010611245052052301", -9223372036854775808ull, 7, 0, 0},
+  {"-22341010611245052052302", -9223372036854775808ull, 7, 0, ERANGE},
+  {"-1000000000000000000000", -9223372036854775808ull, 8, 0, 0},
+  {"-1000000000000000000001", -9223372036854775808ull, 8, 0, ERANGE},
+  {"-67404283172107811828", -9223372036854775808ull, 9, 0, 0},
+  {"-67404283172107811830", -9223372036854775808ull, 9, 0, ERANGE},
+  {"-9223372036854775808", -9223372036854775808ull, 10, 0, 0},
+  {"-9223372036854775809", -9223372036854775808ull, 10, 0, ERANGE},
+  {"-1728002635214590698", -9223372036854775808ull, 11, 0, 0},
+  {"-1728002635214590699", -9223372036854775808ull, 11, 0, ERANGE},
+  {"-41a792678515120368", -9223372036854775808ull, 12, 0, 0},
+  {"-41a792678515120369", -9223372036854775808ull, 12, 0, ERANGE},
+  {"-10b269549075433c38", -9223372036854775808ull, 13, 0, 0},
+  {"-10b269549075433c39", -9223372036854775808ull, 13, 0, ERANGE},
+  {"-4340724c6c71dc7a8", -9223372036854775808ull, 14, 0, 0},
+  {"-4340724c6c71dc7a9", -9223372036854775808ull, 14, 0, ERANGE},
+  {"-160e2ad3246366808", -9223372036854775808ull, 15, 0, 0},
+  {"-160e2ad3246366809", -9223372036854775808ull, 15, 0, ERANGE},
+  {"-8000000000000000", -9223372036854775808ull, 16, 0, 0},
+  {"-8000000000000001", -9223372036854775808ull, 16, 0, ERANGE},
+  {"-33d3d8307b214009", -9223372036854775808ull, 17, 0, 0},
+  {"-33d3d8307b21400a", -9223372036854775808ull, 17, 0, ERANGE},
+  {"-16agh595df825fa8", -9223372036854775808ull, 18, 0, 0},
+  {"-16agh595df825fa9", -9223372036854775808ull, 18, 0, ERANGE},
+  {"-ba643dci0ffeehi", -9223372036854775808ull, 19, 0, 0},
+  {"-ba643dci0ffeei0", -9223372036854775808ull, 19, 0, ERANGE},
+  {"-5cbfjia3fh26ja8", -9223372036854775808ull, 20, 0, 0},
+  {"-5cbfjia3fh26ja9", -9223372036854775808ull, 20, 0, ERANGE},
+  {"-2heiciiie82dh98", -9223372036854775808ull, 21, 0, 0},
+  {"-2heiciiie82dh99", -9223372036854775808ull, 21, 0, ERANGE},
+  {"-1adaibb21dckfa8", -9223372036854775808ull, 22, 0, 0},
+  {"-1adaibb21dckfa9", -9223372036854775808ull, 22, 0, ERANGE},
+  {"-i6k448cf4192c3", -9223372036854775808ull, 23, 0, 0},
+  {"-i6k448cf4192c4", -9223372036854775808ull, 23, 0, ERANGE},
+  {"-acd772jnc9l0l8", -9223372036854775808ull, 24, 0, 0},
+  {"-acd772jnc9l0l9", -9223372036854775808ull, 24, 0, ERANGE},
+  {"-64ie1focnn5g78", -9223372036854775808ull, 25, 0, 0},
+  {"-64ie1focnn5g79", -9223372036854775808ull, 25, 0, ERANGE},
+  {"-3igoecjbmca688", -9223372036854775808ull, 26, 0, 0},
+  {"-3igoecjbmca689", -9223372036854775808ull, 26, 0, ERANGE},
+  {"-27c48l5b37oaoq", -9223372036854775808ull, 27, 0, 0},
+  {"-27c48l5b37oap0", -9223372036854775808ull, 27, 0, ERANGE},
+  {"-1bk39f3ah3dmq8", -9223372036854775808ull, 28, 0, 0},
+  {"-1bk39f3ah3dmq9", -9223372036854775808ull, 28, 0, ERANGE},
+  {"-q1se8f0m04isc", -9223372036854775808ull, 29, 0, 0},
+  {"-q1se8f0m04isd", -9223372036854775808ull, 29, 0, ERANGE},
+  {"-hajppbc1fc208", -9223372036854775808ull, 30, 0, 0},
+  {"-hajppbc1fc209", -9223372036854775808ull, 30, 0, ERANGE},
+  {"-bm03i95hia438", -9223372036854775808ull, 31, 0, 0},
+  {"-bm03i95hia439", -9223372036854775808ull, 31, 0, ERANGE},
+  {"-8000000000000", -9223372036854775808ull, 32, 0, 0},
+  {"-8000000000001", -9223372036854775808ull, 32, 0, ERANGE},
+  {"-5hg4ck9jd4u38", -9223372036854775808ull, 33, 0, 0},
+  {"-5hg4ck9jd4u39", -9223372036854775808ull, 33, 0, ERANGE},
+  {"-3tdtk1v8j6tpq", -9223372036854775808ull, 34, 0, 0},
+  {"-3tdtk1v8j6tpr", -9223372036854775808ull, 34, 0, ERANGE},
+  {"-2pijmikexrxp8", -9223372036854775808ull, 35, 0, 0},
+  {"-2pijmikexrxp9", -9223372036854775808ull, 35, 0, ERANGE},
+  {"-1y2p0ij32e8e8", -9223372036854775808ull, 36, 0, 0},
+  {"-1y2p0ij32e8e9", -9223372036854775808ull, 36, 0, ERANGE},
+  {NULL, 0, 0, 0, 0},
+
+  /* Then unsigned.  */
+  {"  0", 0, 0, 0, 0},
+  {"0xffffffffg", 0xffffffff, 0, 'g', 0},
+  {"0xffffffffffffffffg", 0xffffffffffffffffull, 0, 'g', 0},
+  {"-0xfedcba987654321", 0xf0123456789abcdfull, 0, 0, 0},
+  {"0xf1f2f3f4f5f6f7f8f9", 0xffffffffffffffffull, 0, 0, ERANGE},
+  {"-0x123456789abcdef01", 0xffffffffffffffffull, 0, 0, ERANGE},
+
+  {"1111111111111111111111111111111111111111111111111111111111111111",
+   0xffffffffffffffff, 2, 0, 0},
+  {"10000000000000000000000000000000000000000000000000000000000000000",
+   0xffffffffffffffff, 2, 0, ERANGE},
+  {"11112220022122120101211020120210210211220",
+   0xffffffffffffffff, 3, 0, 0},
+  {"11112220022122120101211020120210210211221",
+   0xffffffffffffffff, 3, 0, ERANGE},
+  {"33333333333333333333333333333333", 0xffffffffffffffff, 4, 0, 0},
+  {"100000000000000000000000000000000", 0xffffffffffffffff, 4, 0, ERANGE},
+  {"2214220303114400424121122430", 0xffffffffffffffff, 5, 0, 0},
+  {"2214220303114400424121122431", 0xffffffffffffffff, 5, 0, ERANGE},
+  {"3520522010102100444244423", 0xffffffffffffffff, 6, 0, 0},
+  {"3520522010102100444244424", 0xffffffffffffffff, 6, 0, ERANGE},
+  {"45012021522523134134601", 0xffffffffffffffff, 7, 0, 0},
+  {"45012021522523134134602", 0xffffffffffffffff, 7, 0, ERANGE},
+  {"1777777777777777777777", 0xffffffffffffffff, 8, 0, 0},
+  {"2000000000000000000000", 0xffffffffffffffff, 8, 0, ERANGE},
+  {"145808576354216723756", 0xffffffffffffffff, 9, 0, 0},
+  {"145808576354216723757", 0xffffffffffffffff, 9, 0, ERANGE},
+  {"18446744073709551615", 0xffffffffffffffff, 10, 0, 0},
+  {"18446744073709551616", 0xffffffffffffffff, 10, 0, ERANGE},
+  {"335500516a429071284", 0xffffffffffffffff, 11, 0, 0},
+  {"335500516a429071285", 0xffffffffffffffff, 11, 0, ERANGE},
+  {"839365134a2a240713", 0xffffffffffffffff, 12, 0, 0},
+  {"839365134a2a240714", 0xffffffffffffffff, 12, 0, ERANGE},
+  {"219505a9511a867b72", 0xffffffffffffffff, 13, 0, 0},
+  {"219505a9511a867b73", 0xffffffffffffffff, 13, 0, ERANGE},
+  {"8681049adb03db171", 0xffffffffffffffff, 14, 0, 0},
+  {"8681049adb03db172", 0xffffffffffffffff, 14, 0, ERANGE},
+  {"2c1d56b648c6cd110", 0xffffffffffffffff, 15, 0, 0},
+  {"2c1d56b648c6cd111", 0xffffffffffffffff, 15, 0, ERANGE},
+  {"ffffffffffffffff", 0xffffffffffffffff, 16, 0, 0},
+  {"10000000000000000", 0xffffffffffffffff, 16, 0, ERANGE},
+  {"67979g60f5428010", 0xffffffffffffffff, 17, 0, 0},
+  {"67979g60f5428011", 0xffffffffffffffff, 17, 0, ERANGE},
+  {"2d3fgb0b9cg4bd2f", 0xffffffffffffffff, 18, 0, 0},
+  {"2d3fgb0b9cg4bd2g", 0xffffffffffffffff, 18, 0, ERANGE},
+  {"141c8786h1ccaagg", 0xffffffffffffffff, 19, 0, 0},
+  {"141c8786h1ccaagh", 0xffffffffffffffff, 19, 0, ERANGE},
+  {"b53bjh07be4dj0f", 0xffffffffffffffff, 20, 0, 0},
+  {"b53bjh07be4dj0g", 0xffffffffffffffff, 20, 0, ERANGE},
+  {"5e8g4ggg7g56dif", 0xffffffffffffffff, 21, 0, 0},
+  {"5e8g4ggg7g56dig", 0xffffffffffffffff, 21, 0, ERANGE},
+  {"2l4lf104353j8kf", 0xffffffffffffffff, 22, 0, 0},
+  {"2l4lf104353j8kg", 0xffffffffffffffff, 22, 0, ERANGE},
+  {"1ddh88h2782i515", 0xffffffffffffffff, 23, 0, 0},
+  {"1ddh88h2782i516", 0xffffffffffffffff, 23, 0, ERANGE},
+  {"l12ee5fn0ji1if", 0xffffffffffffffff, 24, 0, 0},
+  {"l12ee5fn0ji1ig", 0xffffffffffffffff, 24, 0, ERANGE},
+  {"c9c336o0mlb7ef", 0xffffffffffffffff, 25, 0, 0},
+  {"c9c336o0mlb7eg", 0xffffffffffffffff, 25, 0, ERANGE},
+  {"7b7n2pcniokcgf", 0xffffffffffffffff, 26, 0, 0},
+  {"7b7n2pcniokcgg", 0xffffffffffffffff, 26, 0, ERANGE},
+  {"4eo8hfam6fllmo", 0xffffffffffffffff, 27, 0, 0},
+  {"4eo8hfam6fllmp", 0xffffffffffffffff, 27, 0, ERANGE},
+  {"2nc6j26l66rhof", 0xffffffffffffffff, 28, 0, 0},
+  {"2nc6j26l66rhog", 0xffffffffffffffff, 28, 0, ERANGE},
+  {"1n3rsh11f098rn", 0xffffffffffffffff, 29, 0, 0},
+  {"1n3rsh11f098ro", 0xffffffffffffffff, 29, 0, ERANGE},
+  {"14l9lkmo30o40f", 0xffffffffffffffff, 30, 0, 0},
+  {"14l9lkmo30o40g", 0xffffffffffffffff, 30, 0, ERANGE},
+  {"nd075ib45k86f", 0xffffffffffffffff, 31, 0, 0},
+  {"nd075ib45k86g", 0xffffffffffffffff, 31, 0, ERANGE},
+  {"fvvvvvvvvvvvv", 0xffffffffffffffff, 32, 0, 0},
+  {"g000000000000", 0xffffffffffffffff, 32, 0, ERANGE},
+  {"b1w8p7j5q9r6f", 0xffffffffffffffff, 33, 0, 0},
+  {"b1w8p7j5q9r6g", 0xffffffffffffffff, 33, 0, ERANGE},
+  {"7orp63sh4dphh", 0xffffffffffffffff, 34, 0, 0},
+  {"7orp63sh4dphi", 0xffffffffffffffff, 34, 0, ERANGE},
+  {"5g24a25twkwff", 0xffffffffffffffff, 35, 0, 0},
+  {"5g24a25twkwfg", 0xffffffffffffffff, 35, 0, ERANGE},
+  {"3w5e11264sgsf", 0xffffffffffffffff, 36, 0, 0},
+  {"3w5e11264sgsg", 0xffffffffffffffff, 36, 0, ERANGE},
+  {NULL, 0, 0, 0, 0},
+  };
+
+/* Prototypes for local functions.  */
+static void expand (char *dst, int c);
+
+static int
+do_test (void)
+{
+  const struct ltest *lt;
+  char *ep;
+  int status = 0;
+  int save_errno;
+
+  for (lt = tests; lt->str != NULL; ++lt)
+    {
+      long long int l;
+
+      errno = 0;
+      l = strtoll (lt->str, &ep, lt->base);
+      save_errno = errno;
+      printf ("strtoll(\"%s\", , %d) test %u",
+	      lt->str, lt->base, (unsigned int) (lt - tests));
+      if (l == (long long int) lt->expect && *ep == lt->left
+	  && save_errno == lt->err)
+	puts("\tOK");
+      else
+	{
+	  puts("\tBAD");
+	  if (l != (long long int) lt->expect)
+	    printf("  returns %lld, expected %lld\n",
+		   l, (long long int) lt->expect);
+	  if (lt->left != *ep)
+	    {
+	      char exp1[5], exp2[5];
+	      expand (exp1, *ep);
+	      expand (exp2, lt->left);
+	      printf ("  leaves '%s', expected '%s'\n", exp1, exp2);
+	    }
+	  if (save_errno != lt->err)
+	    printf ("  errno %d (%s)  instead of %d (%s)\n",
+		    save_errno, strerror (save_errno),
+		    lt->err, strerror (lt->err));
+	  status = 1;
+	}
+    }
+
+  for (++lt; lt->str != NULL; lt++)
+    {
+      unsigned long long int ul;
+
+      errno = 0;
+      ul = strtoull (lt->str, &ep, lt->base);
+      save_errno = errno;
+      printf ("strtoull(\"%s\", , %d) test %u",
+	      lt->str, lt->base, (unsigned int) (lt - tests));
+      if (ul == lt->expect && *ep == lt->left && save_errno == lt->err)
+	puts("\tOK");
+      else
+	{
+	  puts ("\tBAD");
+	  if (ul != lt->expect)
+	    printf ("  returns %llu, expected %llu\n",
+		    ul, lt->expect);
+	  if (lt->left != *ep)
+	    {
+	      char exp1[5], exp2[5];
+	      expand (exp1, *ep);
+	      expand (exp2, lt->left);
+	      printf ("  leaves '%s', expected '%s'\n", exp1, exp2);
+	    }
+	  if (save_errno != lt->err)
+	    printf ("  errno %d (%s) instead of %d (%s)\n",
+		    save_errno, strerror (save_errno),
+		    lt->err, strerror (lt->err));
+	  status = 1;
+	}
+    }
+
+  return status ? EXIT_FAILURE : EXIT_SUCCESS;
+}
+
+static void
+expand (char *dst, int c)
+{
+  if (isprint (c))
+    {
+      dst[0] = c;
+      dst[1] = '\0';
+    }
+  else
+    (void) sprintf (dst, "%#.3o", (unsigned int) c);
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-system.c b/REORG.TODO/stdlib/tst-system.c
new file mode 100644
index 0000000000..6cb62e1248
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-system.c
@@ -0,0 +1,30 @@
+/* Copyright (C) 2002-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <stdlib.h>
+
+
+static int
+do_test (void)
+{
+  return system (":");
+}
+
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-thread-quick_exit.cc b/REORG.TODO/stdlib/tst-thread-quick_exit.cc
new file mode 100644
index 0000000000..047df6043d
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-thread-quick_exit.cc
@@ -0,0 +1,66 @@
+/* Bug 20198: Do not call object destructors at exit.
+   Copyright (C) 2016-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <errno.h>
+#include <pthread.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+struct A
+{
+  ~A () { abort (); }
+};
+
+thread_local A a1;
+thread_local A a2;
+
+void
+__attribute__ ((noinline, noclone))
+optimization_barrier (A &)
+{
+}
+
+/* Call std::quick_exit from a non-main thread.  */
+void *
+non_main_thread (void *)
+{
+  optimization_barrier (a1);
+  /* The C++11 standard in 18.5.12 says:
+     "Objects shall not be destroyed as a result of calling
+      quick_exit."
+     If quick_exit calls the destructors the test aborts.  */
+  quick_exit (0);
+}
+
+static int
+do_test()
+{
+  optimization_barrier (a2);
+  pthread_t thr;
+  int ret = pthread_create (&thr, NULL, non_main_thread, NULL);
+  if (ret != 0)
+    {
+      errno = ret;
+      printf ("error: pthread_create: %m\n");
+    }
+  pthread_join (thr, NULL);
+  return 1;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-tininess.c b/REORG.TODO/stdlib/tst-tininess.c
new file mode 100644
index 0000000000..c032454f96
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-tininess.c
@@ -0,0 +1,69 @@
+/* Test that tininess.h is correct for this architecture.
+   Copyright (C) 2012-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <fenv.h>
+#include <float.h>
+#include <stdio.h>
+#include <tininess.h>
+
+volatile float a = 0x1.fffp-126;
+volatile float b = 0x1.0008p-1;
+volatile float c;
+volatile float m = FLT_MIN;
+volatile float mm;
+
+static int
+do_test (void)
+{
+  int result = 0;
+#ifdef FE_UNDERFLOW
+  feclearexcept (FE_ALL_EXCEPT);
+  mm = m * m;
+  if (!fetestexcept (FE_UNDERFLOW))
+    {
+      puts ("underflow exception not supported at runtime, cannot test");
+      return 0;
+    }
+  feclearexcept (FE_ALL_EXCEPT);
+  c = a * b;
+  if (fetestexcept (FE_UNDERFLOW))
+    {
+      if (TININESS_AFTER_ROUNDING)
+	{
+	  puts ("tininess.h says after rounding, "
+		"but detected before rounding");
+	  result = 1;
+	}
+    }
+  else
+    {
+      if (!TININESS_AFTER_ROUNDING)
+	{
+	  puts ("tininess.h says before rounding, "
+		"but detected after rounding");
+	  result = 1;
+	}
+    }
+#else
+  puts ("underflow exception not supported at compile time, cannot test");
+#endif
+  return result;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-tls-atexit-lib.c b/REORG.TODO/stdlib/tst-tls-atexit-lib.c
new file mode 100644
index 0000000000..a227e4653c
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-tls-atexit-lib.c
@@ -0,0 +1,38 @@
+/* Verify that DSO is unloaded only if its TLS objects are destroyed - the DSO.
+   Copyright (C) 2013-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <stdlib.h>
+
+extern void *__dso_handle;
+
+typedef struct
+{
+  void *val;
+} A;
+
+/* We only care about the destructor.  */
+void A_dtor (void *obj)
+{
+  ((A *)obj)->val = obj;
+}
+
+void reg_dtor (void)
+{
+  static __thread A b;
+  __cxa_thread_atexit_impl (A_dtor, &b, __dso_handle);
+}
diff --git a/REORG.TODO/stdlib/tst-tls-atexit-nodelete.c b/REORG.TODO/stdlib/tst-tls-atexit-nodelete.c
new file mode 100644
index 0000000000..2293685144
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-tls-atexit-nodelete.c
@@ -0,0 +1,24 @@
+/* Verify that a RTLD_NODELETE DSO is not unloaded even if its TLS objects are
+   destroyed.
+
+   Copyright (C) 2015-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#define NO_DELETE 1
+#define H2_RTLD_FLAGS (RTLD_LAZY | RTLD_NODELETE)
+#define LOADED_IS_GOOD true
+#include "tst-tls-atexit.c"
diff --git a/REORG.TODO/stdlib/tst-tls-atexit.c b/REORG.TODO/stdlib/tst-tls-atexit.c
new file mode 100644
index 0000000000..6dbf49d460
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-tls-atexit.c
@@ -0,0 +1,156 @@
+/* Verify that DSO is unloaded only if its TLS objects are destroyed.
+   Copyright (C) 2013-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* For the default case, i.e. NO_DELETE not defined, the test dynamically loads
+   a DSO and spawns a thread that subsequently calls into the DSO to register a
+   destructor for an object in the DSO and then calls dlclose on the handle for
+   the DSO.  When the thread exits, the DSO should not be unloaded or else the
+   destructor called during thread exit will crash.  Further in the main
+   thread, the DSO is opened and closed again, at which point the DSO should be
+   unloaded.
+
+   When NO_DELETE is defined, the DSO is loaded twice, once with just RTLD_LAZY
+   flag and the second time with the RTLD_NODELETE flag set.  The thread is
+   spawned, destructor registered and then thread exits without closing the
+   DSO.  In the main thread, the first handle is then closed, followed by the
+   second handle.  In the end, the DSO should remain loaded due to the
+   RTLD_NODELETE flag being set in the second dlopen call.  */
+
+#include <dlfcn.h>
+#include <pthread.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <string.h>
+#include <errno.h>
+#include <link.h>
+#include <stdbool.h>
+
+#ifndef NO_DELETE
+# define LOADED_IS_GOOD false
+#endif
+
+#ifndef H2_RTLD_FLAGS
+# define H2_RTLD_FLAGS (RTLD_LAZY)
+#endif
+
+#define DSO_NAME "$ORIGIN/tst-tls-atexit-lib.so"
+
+/* Walk through the map in the _r_debug structure to see if our lib is still
+   loaded.  */
+static bool
+is_loaded (void)
+{
+  struct link_map *lm = (struct link_map *) _r_debug.r_map;
+
+  for (; lm; lm = lm->l_next)
+    if (lm->l_type == lt_loaded && lm->l_name
+	&& strcmp (basename (DSO_NAME), basename (lm->l_name)) == 0)
+      {
+	printf ("%s is still loaded\n", lm->l_name);
+	return true;
+      }
+  return false;
+}
+
+/* Accept a valid handle returned by DLOPEN, load the reg_dtor symbol to
+   register a destructor and then call dlclose on the handle.  The dlclose
+   should not unload the DSO since the destructor has not been called yet.  */
+static void *
+reg_dtor_and_close (void *h)
+{
+  void (*reg_dtor) (void) = (void (*) (void)) dlsym (h, "reg_dtor");
+
+  if (reg_dtor == NULL)
+    {
+      printf ("Unable to find symbol: %s\n", dlerror ());
+      return (void *) (uintptr_t) 1;
+    }
+
+  reg_dtor ();
+
+#ifndef NO_DELETE
+  dlclose (h);
+#endif
+
+  return NULL;
+}
+
+static int
+spawn_thread (void *h)
+{
+  pthread_t t;
+  int ret;
+  void *thr_ret;
+
+  if ((ret = pthread_create (&t, NULL, reg_dtor_and_close, h)) != 0)
+    {
+      printf ("pthread_create failed: %s\n", strerror (ret));
+      return 1;
+    }
+
+  if ((ret = pthread_join (t, &thr_ret)) != 0)
+    {
+      printf ("pthread_join failed: %s\n", strerror (ret));
+      return 1;
+    }
+
+  if (thr_ret != NULL)
+    return 1;
+
+  return 0;
+}
+
+static int
+do_test (void)
+{
+  /* Load the DSO.  */
+  void *h1 = dlopen (DSO_NAME, RTLD_LAZY);
+  if (h1 == NULL)
+    {
+      printf ("h1: Unable to load DSO: %s\n", dlerror ());
+      return 1;
+    }
+
+#ifndef NO_DELETE
+  if (spawn_thread (h1) != 0)
+    return 1;
+#endif
+
+  void *h2 = dlopen (DSO_NAME, H2_RTLD_FLAGS);
+  if (h2 == NULL)
+    {
+      printf ("h2: Unable to load DSO: %s\n", dlerror ());
+      return 1;
+    }
+
+#ifdef NO_DELETE
+  if (spawn_thread (h1) != 0)
+    return 1;
+
+  dlclose (h1);
+#endif
+  dlclose (h2);
+
+  /* Check link maps to ensure that the DSO has unloaded.  In the normal case,
+     the DSO should be unloaded if there are no uses.  However, if one of the
+     dlopen calls were with RTLD_NODELETE, the DSO should remain loaded.  */
+  return is_loaded () == LOADED_IS_GOOD ? 0 : 1;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-unsetenv1.c b/REORG.TODO/stdlib/tst-unsetenv1.c
new file mode 100644
index 0000000000..a2a760d241
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-unsetenv1.c
@@ -0,0 +1,12 @@
+#include <stdlib.h>
+
+static int
+do_test (void)
+{
+  clearenv ();
+  unsetenv ("FOO");
+  return 0;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-width-stdint.c b/REORG.TODO/stdlib/tst-width-stdint.c
new file mode 100644
index 0000000000..9a4c4167b2
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-width-stdint.c
@@ -0,0 +1,185 @@
+/* Test integer width macros in <stdint.h>.
+   Copyright (C) 2016-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <signal.h>
+#include <stddef.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <wchar.h>
+
+#define CHECK_WIDTH(TYPE, MAX, WIDTH)					\
+  do									\
+    {									\
+      if ((MAX >> ((TYPE) -1 < 0 ? (WIDTH - 2) : (WIDTH - 1))) != 1)	\
+	{								\
+	  puts ("bad width of " #TYPE);					\
+	  result = 1;							\
+	}								\
+      else								\
+	puts ("width of " #TYPE " OK");					\
+    }									\
+  while (0)
+
+static int
+do_test (void)
+{
+  int result = 0;
+
+#ifndef INT8_WIDTH
+# error "missing INT8_WIDTH"
+#endif
+  CHECK_WIDTH (int8_t, INT8_MAX, INT8_WIDTH);
+#ifndef INT16_WIDTH
+# error "missing INT16_WIDTH"
+#endif
+  CHECK_WIDTH (int16_t, INT16_MAX, INT16_WIDTH);
+#ifndef INT32_WIDTH
+# error "missing INT32_WIDTH"
+#endif
+  CHECK_WIDTH (int32_t, INT32_MAX, INT32_WIDTH);
+#ifndef INT64_WIDTH
+# error "missing INT64_WIDTH"
+#endif
+  CHECK_WIDTH (int64_t, INT64_MAX, INT64_WIDTH);
+#ifndef UINT8_WIDTH
+# error "missing UINT8_WIDTH"
+#endif
+  CHECK_WIDTH (uint8_t, UINT8_MAX, UINT8_WIDTH);
+#ifndef UINT16_WIDTH
+# error "missing UINT16_WIDTH"
+#endif
+  CHECK_WIDTH (uint16_t, UINT16_MAX, UINT16_WIDTH);
+#ifndef UINT32_WIDTH
+# error "missing UINT32_WIDTH"
+#endif
+  CHECK_WIDTH (uint32_t, UINT32_MAX, UINT32_WIDTH);
+#ifndef UINT64_WIDTH
+# error "missing UINT64_WIDTH"
+#endif
+  CHECK_WIDTH (uint64_t, UINT64_MAX, UINT64_WIDTH);
+
+#ifndef INT_LEAST8_WIDTH
+# error "missing INT_LEAST8_WIDTH"
+#endif
+  CHECK_WIDTH (int_least8_t, INT_LEAST8_MAX, INT_LEAST8_WIDTH);
+#ifndef INT_LEAST16_WIDTH
+# error "missing INT_LEAST16_WIDTH"
+#endif
+  CHECK_WIDTH (int_least16_t, INT_LEAST16_MAX, INT_LEAST16_WIDTH);
+#ifndef INT_LEAST32_WIDTH
+# error "missing INT_LEAST32_WIDTH"
+#endif
+  CHECK_WIDTH (int_least32_t, INT_LEAST32_MAX, INT_LEAST32_WIDTH);
+#ifndef INT_LEAST64_WIDTH
+# error "missing INT_LEAST64_WIDTH"
+#endif
+  CHECK_WIDTH (int_least64_t, INT_LEAST64_MAX, INT_LEAST64_WIDTH);
+#ifndef UINT_LEAST8_WIDTH
+# error "missing UINT_LEAST8_WIDTH"
+#endif
+  CHECK_WIDTH (uint_least8_t, UINT_LEAST8_MAX, UINT_LEAST8_WIDTH);
+#ifndef UINT_LEAST16_WIDTH
+# error "missing UINT_LEAST16_WIDTH"
+#endif
+  CHECK_WIDTH (uint_least16_t, UINT_LEAST16_MAX, UINT_LEAST16_WIDTH);
+#ifndef UINT_LEAST32_WIDTH
+# error "missing UINT_LEAST32_WIDTH"
+#endif
+  CHECK_WIDTH (uint_least32_t, UINT_LEAST32_MAX, UINT_LEAST32_WIDTH);
+#ifndef UINT_LEAST64_WIDTH
+# error "missing UINT_LEAST64_WIDTH"
+#endif
+  CHECK_WIDTH (uint_least64_t, UINT_LEAST64_MAX, UINT_LEAST64_WIDTH);
+
+#ifndef INT_FAST8_WIDTH
+# error "missing INT_FAST8_WIDTH"
+#endif
+  CHECK_WIDTH (int_fast8_t, INT_FAST8_MAX, INT_FAST8_WIDTH);
+#ifndef INT_FAST16_WIDTH
+# error "missing INT_FAST16_WIDTH"
+#endif
+  CHECK_WIDTH (int_fast16_t, INT_FAST16_MAX, INT_FAST16_WIDTH);
+#ifndef INT_FAST32_WIDTH
+# error "missing INT_FAST32_WIDTH"
+#endif
+  CHECK_WIDTH (int_fast32_t, INT_FAST32_MAX, INT_FAST32_WIDTH);
+#ifndef INT_FAST64_WIDTH
+# error "missing INT_FAST64_WIDTH"
+#endif
+  CHECK_WIDTH (int_fast64_t, INT_FAST64_MAX, INT_FAST64_WIDTH);
+#ifndef UINT_FAST8_WIDTH
+# error "missing UINT_FAST8_WIDTH"
+#endif
+  CHECK_WIDTH (uint_fast8_t, UINT_FAST8_MAX, UINT_FAST8_WIDTH);
+#ifndef UINT_FAST16_WIDTH
+# error "missing UINT_FAST16_WIDTH"
+#endif
+  CHECK_WIDTH (uint_fast16_t, UINT_FAST16_MAX, UINT_FAST16_WIDTH);
+#ifndef UINT_FAST32_WIDTH
+# error "missing UINT_FAST32_WIDTH"
+#endif
+  CHECK_WIDTH (uint_fast32_t, UINT_FAST32_MAX, UINT_FAST32_WIDTH);
+#ifndef UINT_FAST64_WIDTH
+# error "missing UINT_FAST64_WIDTH"
+#endif
+  CHECK_WIDTH (uint_fast64_t, UINT_FAST64_MAX, UINT_FAST64_WIDTH);
+
+#ifndef INTPTR_WIDTH
+# error "missing INTPTR_WIDTH"
+#endif
+  CHECK_WIDTH (intptr_t, INTPTR_MAX, INTPTR_WIDTH);
+#ifndef UINTPTR_WIDTH
+# error "missing UINTPTR_WIDTH"
+#endif
+  CHECK_WIDTH (uintptr_t, UINTPTR_MAX, UINTPTR_WIDTH);
+
+#ifndef INTMAX_WIDTH
+# error "missing INTMAX_WIDTH"
+#endif
+  CHECK_WIDTH (intmax_t, INTMAX_MAX, INTMAX_WIDTH);
+#ifndef UINTMAX_WIDTH
+# error "missing UINTMAX_WIDTH"
+#endif
+  CHECK_WIDTH (uintmax_t, UINTMAX_MAX, UINTMAX_WIDTH);
+
+#ifndef PTRDIFF_WIDTH
+# error "missing PTRDIFF_WIDTH"
+#endif
+  CHECK_WIDTH (ptrdiff_t, PTRDIFF_MAX, PTRDIFF_WIDTH);
+#ifndef SIG_ATOMIC_WIDTH
+# error "missing SIG_ATOMIC_WIDTH"
+#endif
+  CHECK_WIDTH (sig_atomic_t, SIG_ATOMIC_MAX, SIG_ATOMIC_WIDTH);
+#ifndef SIZE_WIDTH
+# error "missing SIZE_WIDTH"
+#endif
+  CHECK_WIDTH (size_t, SIZE_MAX, SIZE_WIDTH);
+#ifndef WCHAR_WIDTH
+# error "missing WCHAR_WIDTH"
+#endif
+  CHECK_WIDTH (wchar_t, WCHAR_MAX, WCHAR_WIDTH);
+#ifndef WINT_WIDTH
+# error "missing WINT_WIDTH"
+#endif
+  CHECK_WIDTH (wint_t, WINT_MAX, WINT_WIDTH);
+
+  return result;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-width.c b/REORG.TODO/stdlib/tst-width.c
new file mode 100644
index 0000000000..326bd9d37d
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-width.c
@@ -0,0 +1,87 @@
+/* Test integer width macros.
+   Copyright (C) 2016-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <limits.h>
+#include <stdio.h>
+
+#define CHECK_WIDTH(TYPE, MAX, WIDTH)					\
+  do									\
+    {									\
+      if ((MAX >> ((TYPE) -1 < 0 ? (WIDTH - 2) : (WIDTH - 1))) != 1)	\
+	{								\
+	  puts ("bad width of " #TYPE);					\
+	  result = 1;							\
+	}								\
+      else								\
+	puts ("width of " #TYPE " OK");					\
+    }									\
+  while (0)
+
+static int
+do_test (void)
+{
+  int result = 0;
+#ifndef CHAR_WIDTH
+# error "missing CHAR_WIDTH"
+#endif
+  CHECK_WIDTH (char, CHAR_MAX, CHAR_WIDTH);
+#ifndef SCHAR_WIDTH
+# error "missing SCHAR_WIDTH"
+#endif
+  CHECK_WIDTH (signed char, SCHAR_MAX, SCHAR_WIDTH);
+#ifndef UCHAR_WIDTH
+# error "missing UCHAR_WIDTH"
+#endif
+  CHECK_WIDTH (unsigned char, UCHAR_MAX, UCHAR_WIDTH);
+#ifndef SHRT_WIDTH
+# error "missing SHRT_WIDTH"
+#endif
+  CHECK_WIDTH (signed short, SHRT_MAX, SHRT_WIDTH);
+#ifndef USHRT_WIDTH
+# error "missing USHRT_WIDTH"
+#endif
+  CHECK_WIDTH (unsigned short, USHRT_MAX, USHRT_WIDTH);
+#ifndef INT_WIDTH
+# error "missing INT_WIDTH"
+#endif
+  CHECK_WIDTH (signed int, INT_MAX, INT_WIDTH);
+#ifndef UINT_WIDTH
+# error "missing UINT_WIDTH"
+#endif
+  CHECK_WIDTH (unsigned int, UINT_MAX, UINT_WIDTH);
+#ifndef LONG_WIDTH
+# error "missing LONG_WIDTH"
+#endif
+  CHECK_WIDTH (signed long, LONG_MAX, LONG_WIDTH);
+#ifndef ULONG_WIDTH
+# error "missing ULONG_WIDTH"
+#endif
+  CHECK_WIDTH (unsigned long, ULONG_MAX, ULONG_WIDTH);
+#ifndef LLONG_WIDTH
+# error "missing LLONG_WIDTH"
+#endif
+  CHECK_WIDTH (signed long long, LLONG_MAX, LLONG_WIDTH);
+#ifndef ULLONG_WIDTH
+# error "missing ULLONG_WIDTH"
+#endif
+  CHECK_WIDTH (unsigned long long, ULLONG_MAX, ULLONG_WIDTH);
+  return result;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-xpg-basename.c b/REORG.TODO/stdlib/tst-xpg-basename.c
new file mode 100644
index 0000000000..baf5361747
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-xpg-basename.c
@@ -0,0 +1,69 @@
+/* Copyright (C) 1999-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Andreas Jaeger <aj@suse.de>, 1999.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <libgen.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+static struct
+{
+  const char *path;
+  const char *file;
+} tests [] =
+{
+  { "/dir/file", "file" },
+  { "file", "file"},
+  { "/dir/file///", "file" },
+  { "../file", "file" },
+  { "/", "/" },
+  { NULL, "."},
+  { "", "."}
+};
+
+
+static int
+do_test (void)
+{
+  size_t i = 0;
+  int errors = 0;
+  char path[1024];
+  char *file;
+
+  for (i = 0; i < sizeof (tests) / sizeof (tests [0]); ++i)
+    {
+      if (tests [i].path == NULL)
+	file = __xpg_basename (NULL);
+      else
+	{
+	  strcpy (path, tests [i].path);
+	  file = __xpg_basename (path);
+	}
+      if (strcmp (file, tests [i].file))
+	{
+	  printf ("Test with `%s' failed: Result is: `%s'.\n",
+		  (tests [i].path == NULL ? "NULL" : tests [i].path), file);
+	  errors = 1;
+	}
+    }
+
+  return errors;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/ucontext.h b/REORG.TODO/stdlib/ucontext.h
new file mode 100644
index 0000000000..2cef5f7869
--- /dev/null
+++ b/REORG.TODO/stdlib/ucontext.h
@@ -0,0 +1,52 @@
+/* Copyright (C) 1997-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* System V ABI compliant user-level context switching support.  */
+
+#ifndef _UCONTEXT_H
+#define _UCONTEXT_H	1
+
+#include <features.h>
+
+/* Get machine dependent definition of data structures.  */
+#include <sys/ucontext.h>
+
+__BEGIN_DECLS
+
+/* Get user context and store it in variable pointed to by UCP.  */
+extern int getcontext (ucontext_t *__ucp) __THROWNL;
+
+/* Set user context from information of variable pointed to by UCP.  */
+extern int setcontext (const ucontext_t *__ucp) __THROWNL;
+
+/* Save current context in context variable pointed to by OUCP and set
+   context from variable pointed to by UCP.  */
+extern int swapcontext (ucontext_t *__restrict __oucp,
+			const ucontext_t *__restrict __ucp) __THROWNL;
+
+/* Manipulate user context UCP to continue with calling functions FUNC
+   and the ARGC-1 parameters following ARGC when the context is used
+   the next time in `setcontext' or `swapcontext'.
+
+   We cannot say anything about the parameters FUNC takes; `void'
+   is as good as any other choice.  */
+extern void makecontext (ucontext_t *__ucp, void (*__func) (void),
+			 int __argc, ...) __THROW;
+
+__END_DECLS
+
+#endif /* ucontext.h */
diff --git a/REORG.TODO/stdlib/udiv_qrnnd.c b/REORG.TODO/stdlib/udiv_qrnnd.c
new file mode 100644
index 0000000000..d32796c04d
--- /dev/null
+++ b/REORG.TODO/stdlib/udiv_qrnnd.c
@@ -0,0 +1,10 @@
+/* For some machines GNU MP needs to define an auxiliary function:
+
+   udiv_qrnnd (quotient, remainder, high_numerator, low_numerator, denominator)
+
+   Divides a two-word unsigned integer, composed by the integers
+   HIGH_NUMERATOR and LOW_NUMERATOR, by DENOMINATOR and places the quotient
+   in QUOTIENT and the remainder in REMAINDER.  HIGH_NUMERATOR must be less
+   than DENOMINATOR for correct operation.  If, in addition, the most
+   significant bit of DENOMINATOR must be 1, then the pre-processor symbol
+   UDIV_NEEDS_NORMALIZATION is defined to 1.  */
diff --git a/REORG.TODO/stdlib/wcstoimax.c b/REORG.TODO/stdlib/wcstoimax.c
new file mode 100644
index 0000000000..f1de70f320
--- /dev/null
+++ b/REORG.TODO/stdlib/wcstoimax.c
@@ -0,0 +1 @@
+#error "The correct implementation must be chosen based on the `intmax_t' type"
diff --git a/REORG.TODO/stdlib/wcstombs.c b/REORG.TODO/stdlib/wcstombs.c
new file mode 100644
index 0000000000..7e1667b4a1
--- /dev/null
+++ b/REORG.TODO/stdlib/wcstombs.c
@@ -0,0 +1,35 @@
+/* Copyright (C) 1991-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <stdlib.h>
+#include <string.h>
+#include <wchar.h>
+
+
+/* Convert the `wchar_t' string in PWCS to a multibyte character string
+   in S, writing no more than N characters.  Return the number of bytes
+   written, or (size_t) -1 if an invalid `wchar_t' was found.  */
+size_t
+wcstombs (char *s, const wchar_t *pwcs, size_t n)
+{
+  mbstate_t state;
+
+  memset (&state, '\0', sizeof state);
+
+  /* Return how many we wrote (or maybe an error).  */
+  return __wcsrtombs (s, &pwcs, n, &state);
+}
diff --git a/REORG.TODO/stdlib/wcstoumax.c b/REORG.TODO/stdlib/wcstoumax.c
new file mode 100644
index 0000000000..508cb19f8c
--- /dev/null
+++ b/REORG.TODO/stdlib/wcstoumax.c
@@ -0,0 +1 @@
+#error "The correct implementation must be chosen based on the `uintmax_t' type"
diff --git a/REORG.TODO/stdlib/wctomb.c b/REORG.TODO/stdlib/wctomb.c
new file mode 100644
index 0000000000..c14d4266ec
--- /dev/null
+++ b/REORG.TODO/stdlib/wctomb.c
@@ -0,0 +1,57 @@
+/* Copyright (C) 1991-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <stdlib.h>
+#include <string.h>
+#include <wchar.h>
+#include <gconv.h>
+#include <wcsmbs/wcsmbsload.h>
+
+
+/* Shared with __wctomb_chk.  */
+mbstate_t __wctomb_state attribute_hidden;
+
+/* Convert WCHAR into its multibyte character representation,
+   putting this in S and returning its length.
+
+   Attention: this function should NEVER be intentionally used.
+   The interface is completely stupid.  The state is shared between
+   all conversion functions.  You should use instead the restartable
+   version `wcrtomb'.  */
+int
+wctomb (char *s, wchar_t wchar)
+{
+  /* If S is NULL the function has to return null or not null
+     depending on the encoding having a state depending encoding or
+     not.  */
+  if (s == NULL)
+    {
+      const struct gconv_fcts *fcts;
+
+      /* Get the conversion functions.  */
+      fcts = get_gconv_fcts (_NL_CURRENT_DATA (LC_CTYPE));
+
+      /* This is an extension in the Unix standard which does not directly
+	 violate ISO C.  */
+      memset (&__wctomb_state, '\0', sizeof __wctomb_state);
+
+      return fcts->tomb->__stateful;
+    }
+
+  return __wcrtomb (s, wchar, &__wctomb_state);
+}
+libc_hidden_def (wctomb)
diff --git a/REORG.TODO/stdlib/xpg_basename.c b/REORG.TODO/stdlib/xpg_basename.c
new file mode 100644
index 0000000000..57120f9cb2
--- /dev/null
+++ b/REORG.TODO/stdlib/xpg_basename.c
@@ -0,0 +1,71 @@
+/* Return basename of given pathname according to the weird XPG specification.
+   Copyright (C) 1997-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <string.h>
+#include <libgen.h>
+
+
+char *
+__xpg_basename (char *filename)
+{
+  char *p;
+
+  if (filename == NULL || filename[0] == '\0')
+    /* We return a pointer to a static string containing ".".  */
+    p = (char *) ".";
+  else
+    {
+      p = strrchr (filename, '/');
+
+      if (p == NULL)
+	/* There is no slash in the filename.  Return the whole string.  */
+	p = filename;
+      else
+	{
+	  if (p[1] == '\0')
+	    {
+	      /* We must remove trailing '/'.  */
+	      while (p > filename && p[-1] == '/')
+		--p;
+
+	      /* Now we can be in two situations:
+		 a) the string only contains '/' characters, so we return
+		    '/'
+		 b) p points past the last component, but we have to remove
+		    the trailing slash.  */
+	      if (p > filename)
+		{
+		  *p-- = '\0';
+		  while (p > filename && p[-1] != '/')
+		    --p;
+		}
+	      else
+		/* The last slash we already found is the right position
+		   to return.  */
+		while (p[1] != '\0')
+		  ++p;
+	    }
+	  else
+	    /* Go to the first character of the name.  */
+	    ++p;
+	}
+    }
+
+  return p;
+}