diff options
Diffstat (limited to 'stdlib')
225 files changed, 0 insertions, 37988 deletions
diff --git a/stdlib/Depend b/stdlib/Depend deleted file mode 100644 index f3e1156a4e..0000000000 --- a/stdlib/Depend +++ /dev/null @@ -1 +0,0 @@ -localedata diff --git a/stdlib/Makefile b/stdlib/Makefile deleted file mode 100644 index 9b0acce8cc..0000000000 --- a/stdlib/Makefile +++ /dev/null @@ -1,221 +0,0 @@ -# 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/stdlib/Versions b/stdlib/Versions deleted file mode 100644 index 9cade20a06..0000000000 --- a/stdlib/Versions +++ /dev/null @@ -1,135 +0,0 @@ -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/stdlib/a64l.c b/stdlib/a64l.c deleted file mode 100644 index 55de3129d3..0000000000 --- a/stdlib/a64l.c +++ /dev/null @@ -1,64 +0,0 @@ -/* 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/stdlib/abort.c b/stdlib/abort.c deleted file mode 100644 index 19882f3e3d..0000000000 --- a/stdlib/abort.c +++ /dev/null @@ -1,142 +0,0 @@ -/* 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/stdlib/abs.c b/stdlib/abs.c deleted file mode 100644 index dad7403658..0000000000 --- a/stdlib/abs.c +++ /dev/null @@ -1,27 +0,0 @@ -/* 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/stdlib/add_n.c b/stdlib/add_n.c deleted file mode 100644 index 12ded53c58..0000000000 --- a/stdlib/add_n.c +++ /dev/null @@ -1,53 +0,0 @@ -/* 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/stdlib/addmul_1.c b/stdlib/addmul_1.c deleted file mode 100644 index 9eaea8ba33..0000000000 --- a/stdlib/addmul_1.c +++ /dev/null @@ -1,61 +0,0 @@ -/* 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/stdlib/alloca.h b/stdlib/alloca.h deleted file mode 100644 index 89a1a90a4f..0000000000 --- a/stdlib/alloca.h +++ /dev/null @@ -1,40 +0,0 @@ -/* 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/stdlib/at_quick_exit.c b/stdlib/at_quick_exit.c deleted file mode 100644 index 3b74d0a688..0000000000 --- a/stdlib/at_quick_exit.c +++ /dev/null @@ -1,50 +0,0 @@ -/* 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/stdlib/atexit.c b/stdlib/atexit.c deleted file mode 100644 index f28b6ba1b7..0000000000 --- a/stdlib/atexit.c +++ /dev/null @@ -1,52 +0,0 @@ -/* 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/stdlib/atof.c b/stdlib/atof.c deleted file mode 100644 index a21ce58924..0000000000 --- a/stdlib/atof.c +++ /dev/null @@ -1,28 +0,0 @@ -/* 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/stdlib/atoi.c b/stdlib/atoi.c deleted file mode 100644 index f8593423a6..0000000000 --- a/stdlib/atoi.c +++ /dev/null @@ -1,28 +0,0 @@ -/* 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/stdlib/atol.c b/stdlib/atol.c deleted file mode 100644 index 8ca34c0803..0000000000 --- a/stdlib/atol.c +++ /dev/null @@ -1,28 +0,0 @@ -/* 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/stdlib/atoll.c b/stdlib/atoll.c deleted file mode 100644 index 41b36a016e..0000000000 --- a/stdlib/atoll.c +++ /dev/null @@ -1,28 +0,0 @@ -/* 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/stdlib/bits/monetary-ldbl.h b/stdlib/bits/monetary-ldbl.h deleted file mode 100644 index d042ac5af1..0000000000 --- a/stdlib/bits/monetary-ldbl.h +++ /dev/null @@ -1,27 +0,0 @@ -/* -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/stdlib/bits/stdlib-float.h b/stdlib/bits/stdlib-float.h deleted file mode 100644 index aba8e94596..0000000000 --- a/stdlib/bits/stdlib-float.h +++ /dev/null @@ -1,29 +0,0 @@ -/* 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/stdlib/bits/stdlib-ldbl.h b/stdlib/bits/stdlib-ldbl.h deleted file mode 100644 index 2f568db45a..0000000000 --- a/stdlib/bits/stdlib-ldbl.h +++ /dev/null @@ -1,41 +0,0 @@ -/* -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/stdlib/bits/stdlib.h b/stdlib/bits/stdlib.h deleted file mode 100644 index 864284fc74..0000000000 --- a/stdlib/bits/stdlib.h +++ /dev/null @@ -1,155 +0,0 @@ -/* 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/stdlib/bsearch.c b/stdlib/bsearch.c deleted file mode 100644 index e6aa407491..0000000000 --- a/stdlib/bsearch.c +++ /dev/null @@ -1,23 +0,0 @@ -/* 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/stdlib/bug-fmtmsg1.c b/stdlib/bug-fmtmsg1.c deleted file mode 100644 index 04bfaea3ce..0000000000 --- a/stdlib/bug-fmtmsg1.c +++ /dev/null @@ -1,28 +0,0 @@ -#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/stdlib/bug-getcontext.c b/stdlib/bug-getcontext.c deleted file mode 100644 index 163400acba..0000000000 --- a/stdlib/bug-getcontext.c +++ /dev/null @@ -1,76 +0,0 @@ -/* 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/stdlib/bug-strtod.c b/stdlib/bug-strtod.c deleted file mode 100644 index b91f739104..0000000000 --- a/stdlib/bug-strtod.c +++ /dev/null @@ -1,67 +0,0 @@ -/* 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/stdlib/bug-strtod2.c b/stdlib/bug-strtod2.c deleted file mode 100644 index 6128f2dd56..0000000000 --- a/stdlib/bug-strtod2.c +++ /dev/null @@ -1,57 +0,0 @@ -#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/stdlib/canonicalize.c b/stdlib/canonicalize.c deleted file mode 100644 index c3d892c862..0000000000 --- a/stdlib/canonicalize.c +++ /dev/null @@ -1,246 +0,0 @@ -/* 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/stdlib/cmp.c b/stdlib/cmp.c deleted file mode 100644 index 1480a9b165..0000000000 --- a/stdlib/cmp.c +++ /dev/null @@ -1,48 +0,0 @@ -/* 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/stdlib/cxa_at_quick_exit.c b/stdlib/cxa_at_quick_exit.c deleted file mode 100644 index ebebaf4bd7..0000000000 --- a/stdlib/cxa_at_quick_exit.c +++ /dev/null @@ -1,30 +0,0 @@ -/* 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/stdlib/cxa_atexit.c b/stdlib/cxa_atexit.c deleted file mode 100644 index ce5d9f22b4..0000000000 --- a/stdlib/cxa_atexit.c +++ /dev/null @@ -1,133 +0,0 @@ -/* 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/stdlib/cxa_finalize.c b/stdlib/cxa_finalize.c deleted file mode 100644 index aa0a70cb58..0000000000 --- a/stdlib/cxa_finalize.c +++ /dev/null @@ -1,82 +0,0 @@ -/* 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/stdlib/cxa_thread_atexit_impl.c b/stdlib/cxa_thread_atexit_impl.c deleted file mode 100644 index f9942255a3..0000000000 --- a/stdlib/cxa_thread_atexit_impl.c +++ /dev/null @@ -1,165 +0,0 @@ -/* 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/stdlib/dbl2mpn.c b/stdlib/dbl2mpn.c deleted file mode 100644 index 3872db5c41..0000000000 --- a/stdlib/dbl2mpn.c +++ /dev/null @@ -1,31 +0,0 @@ -/* 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/stdlib/div.c b/stdlib/div.c deleted file mode 100644 index d525afa1ac..0000000000 --- a/stdlib/div.c +++ /dev/null @@ -1,62 +0,0 @@ -/* 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/stdlib/divmod_1.c b/stdlib/divmod_1.c deleted file mode 100644 index 1ef15d6a1e..0000000000 --- a/stdlib/divmod_1.c +++ /dev/null @@ -1,199 +0,0 @@ -/* 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/stdlib/divrem.c b/stdlib/divrem.c deleted file mode 100644 index 984d945dee..0000000000 --- a/stdlib/divrem.c +++ /dev/null @@ -1,234 +0,0 @@ -/* 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/stdlib/drand48-iter.c b/stdlib/drand48-iter.c deleted file mode 100644 index f59c803138..0000000000 --- a/stdlib/drand48-iter.c +++ /dev/null @@ -1,56 +0,0 @@ -/* 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/stdlib/drand48.c b/stdlib/drand48.c deleted file mode 100644 index b98759a32e..0000000000 --- a/stdlib/drand48.c +++ /dev/null @@ -1,30 +0,0 @@ -/* 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/stdlib/drand48_r.c b/stdlib/drand48_r.c deleted file mode 100644 index 801edf43a0..0000000000 --- a/stdlib/drand48_r.c +++ /dev/null @@ -1,27 +0,0 @@ -/* 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/stdlib/erand48.c b/stdlib/erand48.c deleted file mode 100644 index b209189ba3..0000000000 --- a/stdlib/erand48.c +++ /dev/null @@ -1,30 +0,0 @@ -/* 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/stdlib/erand48_r.c b/stdlib/erand48_r.c deleted file mode 100644 index 8f6d3fad61..0000000000 --- a/stdlib/erand48_r.c +++ /dev/null @@ -1,47 +0,0 @@ -/* 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/stdlib/errno.h b/stdlib/errno.h deleted file mode 100644 index 65f2f4570c..0000000000 --- a/stdlib/errno.h +++ /dev/null @@ -1,72 +0,0 @@ -/* 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/stdlib/exit.c b/stdlib/exit.c deleted file mode 100644 index c0b6d666c7..0000000000 --- a/stdlib/exit.c +++ /dev/null @@ -1,107 +0,0 @@ -/* 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/stdlib/exit.h b/stdlib/exit.h deleted file mode 100644 index 7f2e679246..0000000000 --- a/stdlib/exit.h +++ /dev/null @@ -1,77 +0,0 @@ -/* 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/stdlib/fmtmsg.c b/stdlib/fmtmsg.c deleted file mode 100644 index ac0c3aa28a..0000000000 --- a/stdlib/fmtmsg.c +++ /dev/null @@ -1,386 +0,0 @@ -/* 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/stdlib/fmtmsg.h b/stdlib/fmtmsg.h deleted file mode 100644 index 0b9069ca10..0000000000 --- a/stdlib/fmtmsg.h +++ /dev/null @@ -1,105 +0,0 @@ -/* 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/stdlib/fpioconst.c b/stdlib/fpioconst.c deleted file mode 100644 index a0563b9676..0000000000 --- a/stdlib/fpioconst.c +++ /dev/null @@ -1,1329 +0,0 @@ -/* 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/stdlib/fpioconst.h b/stdlib/fpioconst.h deleted file mode 100644 index c05f8e7bac..0000000000 --- a/stdlib/fpioconst.h +++ /dev/null @@ -1,88 +0,0 @@ -/* 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/stdlib/gen-fpioconst.c b/stdlib/gen-fpioconst.c deleted file mode 100644 index e8b3258d1b..0000000000 --- a/stdlib/gen-fpioconst.c +++ /dev/null @@ -1,108 +0,0 @@ -/* 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/stdlib/gen-tst-strtod-round.c b/stdlib/gen-tst-strtod-round.c deleted file mode 100644 index d792a245be..0000000000 --- a/stdlib/gen-tst-strtod-round.c +++ /dev/null @@ -1,191 +0,0 @@ -/* 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/stdlib/getcontext.c b/stdlib/getcontext.c deleted file mode 100644 index 07560033a6..0000000000 --- a/stdlib/getcontext.c +++ /dev/null @@ -1,29 +0,0 @@ -/* 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/stdlib/getentropy.c b/stdlib/getentropy.c deleted file mode 100644 index a71d4cd8f5..0000000000 --- a/stdlib/getentropy.c +++ /dev/null @@ -1,31 +0,0 @@ -/* 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/stdlib/getenv.c b/stdlib/getenv.c deleted file mode 100644 index b6fb1abeaa..0000000000 --- a/stdlib/getenv.c +++ /dev/null @@ -1,92 +0,0 @@ -/* 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/stdlib/getrandom.c b/stdlib/getrandom.c deleted file mode 100644 index b2a83c2db7..0000000000 --- a/stdlib/getrandom.c +++ /dev/null @@ -1,31 +0,0 @@ -/* 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/stdlib/getsubopt.c b/stdlib/getsubopt.c deleted file mode 100644 index 7d6772dc1f..0000000000 --- a/stdlib/getsubopt.c +++ /dev/null @@ -1,79 +0,0 @@ -/* 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/stdlib/gmp-impl.h b/stdlib/gmp-impl.h deleted file mode 100644 index 42d3e4afac..0000000000 --- a/stdlib/gmp-impl.h +++ /dev/null @@ -1,367 +0,0 @@ -/* 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/stdlib/gmp.h b/stdlib/gmp.h deleted file mode 100644 index 821e3affd0..0000000000 --- a/stdlib/gmp.h +++ /dev/null @@ -1,623 +0,0 @@ -/* 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/stdlib/grouping.c b/stdlib/grouping.c deleted file mode 100644 index 63ef4c1644..0000000000 --- a/stdlib/grouping.c +++ /dev/null @@ -1,201 +0,0 @@ -/* 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/stdlib/grouping.h b/stdlib/grouping.h deleted file mode 100644 index d77b6e1105..0000000000 --- a/stdlib/grouping.h +++ /dev/null @@ -1,33 +0,0 @@ -/* 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/stdlib/groupingwc.c b/stdlib/groupingwc.c deleted file mode 100644 index cd9675ee58..0000000000 --- a/stdlib/groupingwc.c +++ /dev/null @@ -1,2 +0,0 @@ -#define USE_WIDE_CHAR 1 -#include "grouping.c" diff --git a/stdlib/inlines.c b/stdlib/inlines.c deleted file mode 100644 index 5f1065ea13..0000000000 --- a/stdlib/inlines.c +++ /dev/null @@ -1,3 +0,0 @@ -#define _FORCE_INLINES -#define _EXTERN_INLINE /* empty */ -#include <gmp.h> diff --git a/stdlib/isomac.c b/stdlib/isomac.c deleted file mode 100644 index d12d1ff661..0000000000 --- a/stdlib/isomac.c +++ /dev/null @@ -1,447 +0,0 @@ -/* 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/stdlib/jrand48.c b/stdlib/jrand48.c deleted file mode 100644 index 4a551ed1f3..0000000000 --- a/stdlib/jrand48.c +++ /dev/null @@ -1,30 +0,0 @@ -/* 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/stdlib/jrand48_r.c b/stdlib/jrand48_r.c deleted file mode 100644 index 40e6a1cb2c..0000000000 --- a/stdlib/jrand48_r.c +++ /dev/null @@ -1,34 +0,0 @@ -/* 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/stdlib/l64a.c b/stdlib/l64a.c deleted file mode 100644 index fc125844ce..0000000000 --- a/stdlib/l64a.c +++ /dev/null @@ -1,56 +0,0 @@ -/* 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/stdlib/labs.c b/stdlib/labs.c deleted file mode 100644 index 506c4bb21e..0000000000 --- a/stdlib/labs.c +++ /dev/null @@ -1,28 +0,0 @@ -/* 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/stdlib/lcong48.c b/stdlib/lcong48.c deleted file mode 100644 index b90ae1c5c2..0000000000 --- a/stdlib/lcong48.c +++ /dev/null @@ -1,26 +0,0 @@ -/* 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/stdlib/lcong48_r.c b/stdlib/lcong48_r.c deleted file mode 100644 index d5228af8f5..0000000000 --- a/stdlib/lcong48_r.c +++ /dev/null @@ -1,36 +0,0 @@ -/* 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, ¶m[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/stdlib/ldbl2mpn.c b/stdlib/ldbl2mpn.c deleted file mode 100644 index 450f9381cc..0000000000 --- a/stdlib/ldbl2mpn.c +++ /dev/null @@ -1 +0,0 @@ -/* Empty. Not needed unless ldbl support is in. */ diff --git a/stdlib/ldiv.c b/stdlib/ldiv.c deleted file mode 100644 index 3951eb05f0..0000000000 --- a/stdlib/ldiv.c +++ /dev/null @@ -1,31 +0,0 @@ -/* 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/stdlib/llabs.c b/stdlib/llabs.c deleted file mode 100644 index 39d0561c0d..0000000000 --- a/stdlib/llabs.c +++ /dev/null @@ -1,29 +0,0 @@ -/* `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/stdlib/lldiv.c b/stdlib/lldiv.c deleted file mode 100644 index 7109f35063..0000000000 --- a/stdlib/lldiv.c +++ /dev/null @@ -1,32 +0,0 @@ -/* `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/stdlib/longlong.h b/stdlib/longlong.h deleted file mode 100644 index 0ec11c5056..0000000000 --- a/stdlib/longlong.h +++ /dev/null @@ -1,1773 +0,0 @@ -/* 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/stdlib/lrand48.c b/stdlib/lrand48.c deleted file mode 100644 index 645977bb96..0000000000 --- a/stdlib/lrand48.c +++ /dev/null @@ -1,30 +0,0 @@ -/* 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/stdlib/lrand48_r.c b/stdlib/lrand48_r.c deleted file mode 100644 index 445efe09b6..0000000000 --- a/stdlib/lrand48_r.c +++ /dev/null @@ -1,30 +0,0 @@ -/* 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/stdlib/lshift.c b/stdlib/lshift.c deleted file mode 100644 index c8228f9aa6..0000000000 --- a/stdlib/lshift.c +++ /dev/null @@ -1,78 +0,0 @@ -/* 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/stdlib/makecontext.c b/stdlib/makecontext.c deleted file mode 100644 index b699bd8a56..0000000000 --- a/stdlib/makecontext.c +++ /dev/null @@ -1,28 +0,0 @@ -/* 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/stdlib/mblen.c b/stdlib/mblen.c deleted file mode 100644 index b98bb915e4..0000000000 --- a/stdlib/mblen.c +++ /dev/null @@ -1,68 +0,0 @@ -/* 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/stdlib/mbstowcs.c b/stdlib/mbstowcs.c deleted file mode 100644 index 8016208e76..0000000000 --- a/stdlib/mbstowcs.c +++ /dev/null @@ -1,39 +0,0 @@ -/* 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/stdlib/mbtowc.c b/stdlib/mbtowc.c deleted file mode 100644 index c391726689..0000000000 --- a/stdlib/mbtowc.c +++ /dev/null @@ -1,72 +0,0 @@ -/* 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/stdlib/mod_1.c b/stdlib/mod_1.c deleted file mode 100644 index 33ca193ce2..0000000000 --- a/stdlib/mod_1.c +++ /dev/null @@ -1,189 +0,0 @@ -/* 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/stdlib/monetary.h b/stdlib/monetary.h deleted file mode 100644 index dcfbfc5262..0000000000 --- a/stdlib/monetary.h +++ /dev/null @@ -1,58 +0,0 @@ -/* 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/stdlib/mp_clz_tab.c b/stdlib/mp_clz_tab.c deleted file mode 100644 index 7759ce3abb..0000000000 --- a/stdlib/mp_clz_tab.c +++ /dev/null @@ -1,36 +0,0 @@ -/* __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/stdlib/mpn2dbl.c b/stdlib/mpn2dbl.c deleted file mode 100644 index 0196e50cad..0000000000 --- a/stdlib/mpn2dbl.c +++ /dev/null @@ -1,29 +0,0 @@ -/* 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/stdlib/mpn2flt.c b/stdlib/mpn2flt.c deleted file mode 100644 index 62a208d6c7..0000000000 --- a/stdlib/mpn2flt.c +++ /dev/null @@ -1,29 +0,0 @@ -/* 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/stdlib/mpn2ldbl.c b/stdlib/mpn2ldbl.c deleted file mode 100644 index 450f9381cc..0000000000 --- a/stdlib/mpn2ldbl.c +++ /dev/null @@ -1 +0,0 @@ -/* Empty. Not needed unless ldbl support is in. */ diff --git a/stdlib/mrand48.c b/stdlib/mrand48.c deleted file mode 100644 index cbc8aaf786..0000000000 --- a/stdlib/mrand48.c +++ /dev/null @@ -1,30 +0,0 @@ -/* 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/stdlib/mrand48_r.c b/stdlib/mrand48_r.c deleted file mode 100644 index a674b5b26d..0000000000 --- a/stdlib/mrand48_r.c +++ /dev/null @@ -1,29 +0,0 @@ -/* 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/stdlib/msort.c b/stdlib/msort.c deleted file mode 100644 index c00f389601..0000000000 --- a/stdlib/msort.c +++ /dev/null @@ -1,310 +0,0 @@ -/* 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/stdlib/mul.c b/stdlib/mul.c deleted file mode 100644 index 88ba1c5176..0000000000 --- a/stdlib/mul.c +++ /dev/null @@ -1,142 +0,0 @@ -/* 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/stdlib/mul_1.c b/stdlib/mul_1.c deleted file mode 100644 index 2c590d2741..0000000000 --- a/stdlib/mul_1.c +++ /dev/null @@ -1,55 +0,0 @@ -/* 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/stdlib/mul_n.c b/stdlib/mul_n.c deleted file mode 100644 index cf243242cc..0000000000 --- a/stdlib/mul_n.c +++ /dev/null @@ -1,360 +0,0 @@ -/* 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/stdlib/nrand48.c b/stdlib/nrand48.c deleted file mode 100644 index 9fdc62ff5f..0000000000 --- a/stdlib/nrand48.c +++ /dev/null @@ -1,30 +0,0 @@ -/* 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/stdlib/nrand48_r.c b/stdlib/nrand48_r.c deleted file mode 100644 index e6f385d907..0000000000 --- a/stdlib/nrand48_r.c +++ /dev/null @@ -1,37 +0,0 @@ -/* 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/stdlib/old_atexit.c b/stdlib/old_atexit.c deleted file mode 100644 index 44bbd699bd..0000000000 --- a/stdlib/old_atexit.c +++ /dev/null @@ -1,8 +0,0 @@ -#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/stdlib/on_exit.c b/stdlib/on_exit.c deleted file mode 100644 index 83845e76d8..0000000000 --- a/stdlib/on_exit.c +++ /dev/null @@ -1,41 +0,0 @@ -/* 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/stdlib/putenv.c b/stdlib/putenv.c deleted file mode 100644 index c0488fc505..0000000000 --- a/stdlib/putenv.c +++ /dev/null @@ -1,87 +0,0 @@ -/* 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/stdlib/qsort.c b/stdlib/qsort.c deleted file mode 100644 index 9badf33ec0..0000000000 --- a/stdlib/qsort.c +++ /dev/null @@ -1,249 +0,0 @@ -/* 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/stdlib/quick_exit.c b/stdlib/quick_exit.c deleted file mode 100644 index 67ad043727..0000000000 --- a/stdlib/quick_exit.c +++ /dev/null @@ -1,48 +0,0 @@ -/* 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/stdlib/rand.c b/stdlib/rand.c deleted file mode 100644 index a036319ce7..0000000000 --- a/stdlib/rand.c +++ /dev/null @@ -1,28 +0,0 @@ -/* 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/stdlib/rand_r.c b/stdlib/rand_r.c deleted file mode 100644 index ca681e8b53..0000000000 --- a/stdlib/rand_r.c +++ /dev/null @@ -1,48 +0,0 @@ -/* 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/stdlib/random.c b/stdlib/random.c deleted file mode 100644 index 43bdb1232e..0000000000 --- a/stdlib/random.c +++ /dev/null @@ -1,300 +0,0 @@ -/* 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/stdlib/random_r.c b/stdlib/random_r.c deleted file mode 100644 index c3f6f9aede..0000000000 --- a/stdlib/random_r.c +++ /dev/null @@ -1,401 +0,0 @@ -/* - 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/stdlib/rpmatch.c b/stdlib/rpmatch.c deleted file mode 100644 index 965c2999d8..0000000000 --- a/stdlib/rpmatch.c +++ /dev/null @@ -1,61 +0,0 @@ -/* 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/stdlib/rshift.c b/stdlib/rshift.c deleted file mode 100644 index d4c7f77769..0000000000 --- a/stdlib/rshift.c +++ /dev/null @@ -1,78 +0,0 @@ -/* 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/stdlib/secure-getenv.c b/stdlib/secure-getenv.c deleted file mode 100644 index 8d6a7e39a6..0000000000 --- a/stdlib/secure-getenv.c +++ /dev/null @@ -1,36 +0,0 @@ -/* 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/stdlib/seed48.c b/stdlib/seed48.c deleted file mode 100644 index 3108b0ca76..0000000000 --- a/stdlib/seed48.c +++ /dev/null @@ -1,28 +0,0 @@ -/* 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/stdlib/seed48_r.c b/stdlib/seed48_r.c deleted file mode 100644 index 3cdf351dfd..0000000000 --- a/stdlib/seed48_r.c +++ /dev/null @@ -1,39 +0,0 @@ -/* 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/stdlib/setcontext.c b/stdlib/setcontext.c deleted file mode 100644 index 3fe77177a2..0000000000 --- a/stdlib/setcontext.c +++ /dev/null @@ -1,29 +0,0 @@ -/* 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/stdlib/setenv.c b/stdlib/setenv.c deleted file mode 100644 index f3c0220045..0000000000 --- a/stdlib/setenv.c +++ /dev/null @@ -1,340 +0,0 @@ -/* 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/stdlib/srand48.c b/stdlib/srand48.c deleted file mode 100644 index 9d665055a0..0000000000 --- a/stdlib/srand48.c +++ /dev/null @@ -1,26 +0,0 @@ -/* 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/stdlib/srand48_r.c b/stdlib/srand48_r.c deleted file mode 100644 index 43bca37062..0000000000 --- a/stdlib/srand48_r.c +++ /dev/null @@ -1,39 +0,0 @@ -/* 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/stdlib/stdlib.h b/stdlib/stdlib.h deleted file mode 100644 index 0a693c2b41..0000000000 --- a/stdlib/stdlib.h +++ /dev/null @@ -1,911 +0,0 @@ -/* 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/stdlib/strfmon.c b/stdlib/strfmon.c deleted file mode 100644 index dfaa9e0d9c..0000000000 --- a/stdlib/strfmon.c +++ /dev/null @@ -1,39 +0,0 @@ -/* 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/stdlib/strfmon_l.c b/stdlib/strfmon_l.c deleted file mode 100644 index af64173800..0000000000 --- a/stdlib/strfmon_l.c +++ /dev/null @@ -1,625 +0,0 @@ -/* 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/stdlib/strfrom-skeleton.c b/stdlib/strfrom-skeleton.c deleted file mode 100644 index 5841919fe4..0000000000 --- a/stdlib/strfrom-skeleton.c +++ /dev/null @@ -1,155 +0,0 @@ -/* 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/stdlib/strfromd.c b/stdlib/strfromd.c deleted file mode 100644 index 5342059008..0000000000 --- a/stdlib/strfromd.c +++ /dev/null @@ -1,22 +0,0 @@ -/* 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/stdlib/strfromf.c b/stdlib/strfromf.c deleted file mode 100644 index 20c674414d..0000000000 --- a/stdlib/strfromf.c +++ /dev/null @@ -1,22 +0,0 @@ -/* 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/stdlib/strfroml.c b/stdlib/strfroml.c deleted file mode 100644 index f8c8a4fcc5..0000000000 --- a/stdlib/strfroml.c +++ /dev/null @@ -1,22 +0,0 @@ -/* 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/stdlib/strtod.c b/stdlib/strtod.c deleted file mode 100644 index 2ac1b2e57a..0000000000 --- a/stdlib/strtod.c +++ /dev/null @@ -1,80 +0,0 @@ -/* 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/stdlib/strtod_l.c b/stdlib/strtod_l.c deleted file mode 100644 index 99c2af357e..0000000000 --- a/stdlib/strtod_l.c +++ /dev/null @@ -1,1787 +0,0 @@ -/* 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/stdlib/strtod_nan.c b/stdlib/strtod_nan.c deleted file mode 100644 index 3fbfb46cfc..0000000000 --- a/stdlib/strtod_nan.c +++ /dev/null @@ -1,24 +0,0 @@ -/* 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/stdlib/strtod_nan_double.h b/stdlib/strtod_nan_double.h deleted file mode 100644 index 224654d005..0000000000 --- a/stdlib/strtod_nan_double.h +++ /dev/null @@ -1,30 +0,0 @@ -/* 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/stdlib/strtod_nan_float.h b/stdlib/strtod_nan_float.h deleted file mode 100644 index 99e95cc2e7..0000000000 --- a/stdlib/strtod_nan_float.h +++ /dev/null @@ -1,29 +0,0 @@ -/* 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/stdlib/strtod_nan_main.c b/stdlib/strtod_nan_main.c deleted file mode 100644 index 96b788cb1e..0000000000 --- a/stdlib/strtod_nan_main.c +++ /dev/null @@ -1,63 +0,0 @@ -/* 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/stdlib/strtod_nan_narrow.h b/stdlib/strtod_nan_narrow.h deleted file mode 100644 index 15733c21ae..0000000000 --- a/stdlib/strtod_nan_narrow.h +++ /dev/null @@ -1,22 +0,0 @@ -/* 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/stdlib/strtod_nan_wide.h b/stdlib/strtod_nan_wide.h deleted file mode 100644 index 23abb2c745..0000000000 --- a/stdlib/strtod_nan_wide.h +++ /dev/null @@ -1,22 +0,0 @@ -/* 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/stdlib/strtof.c b/stdlib/strtof.c deleted file mode 100644 index 600512134c..0000000000 --- a/stdlib/strtof.c +++ /dev/null @@ -1,34 +0,0 @@ -/* 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/stdlib/strtof_l.c b/stdlib/strtof_l.c deleted file mode 100644 index 57e557516a..0000000000 --- a/stdlib/strtof_l.c +++ /dev/null @@ -1,38 +0,0 @@ -/* 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/stdlib/strtof_nan.c b/stdlib/strtof_nan.c deleted file mode 100644 index 0dd44294cc..0000000000 --- a/stdlib/strtof_nan.c +++ /dev/null @@ -1,24 +0,0 @@ -/* 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/stdlib/strtoimax.c b/stdlib/strtoimax.c deleted file mode 100644 index f1de70f320..0000000000 --- a/stdlib/strtoimax.c +++ /dev/null @@ -1 +0,0 @@ -#error "The correct implementation must be chosen based on the `intmax_t' type" diff --git a/stdlib/strtol.c b/stdlib/strtol.c deleted file mode 100644 index 8ac8347e7d..0000000000 --- a/stdlib/strtol.c +++ /dev/null @@ -1,109 +0,0 @@ -/* 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/stdlib/strtol_l.c b/stdlib/strtol_l.c deleted file mode 100644 index 5a0683b2bb..0000000000 --- a/stdlib/strtol_l.c +++ /dev/null @@ -1,551 +0,0 @@ -/* 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/stdlib/strtold.c b/stdlib/strtold.c deleted file mode 100644 index e4ace02dd0..0000000000 --- a/stdlib/strtold.c +++ /dev/null @@ -1,64 +0,0 @@ -/* 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/stdlib/strtold_l.c b/stdlib/strtold_l.c deleted file mode 100644 index bef2a4d3d7..0000000000 --- a/stdlib/strtold_l.c +++ /dev/null @@ -1,65 +0,0 @@ -/* 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/stdlib/strtold_nan.c b/stdlib/strtold_nan.c deleted file mode 100644 index 165a3e6c0f..0000000000 --- a/stdlib/strtold_nan.c +++ /dev/null @@ -1,30 +0,0 @@ -/* 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/stdlib/strtoll.c b/stdlib/strtoll.c deleted file mode 100644 index cb2207cc55..0000000000 --- a/stdlib/strtoll.c +++ /dev/null @@ -1,33 +0,0 @@ -/* 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/stdlib/strtoll_l.c b/stdlib/strtoll_l.c deleted file mode 100644 index 2a712eb80e..0000000000 --- a/stdlib/strtoll_l.c +++ /dev/null @@ -1,27 +0,0 @@ -/* 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/stdlib/strtoul.c b/stdlib/strtoul.c deleted file mode 100644 index f72a8d50b1..0000000000 --- a/stdlib/strtoul.c +++ /dev/null @@ -1,20 +0,0 @@ -/* 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/stdlib/strtoul_l.c b/stdlib/strtoul_l.c deleted file mode 100644 index 6d23ee2964..0000000000 --- a/stdlib/strtoul_l.c +++ /dev/null @@ -1,27 +0,0 @@ -/* 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/stdlib/strtoull.c b/stdlib/strtoull.c deleted file mode 100644 index e3dbd849e0..0000000000 --- a/stdlib/strtoull.c +++ /dev/null @@ -1,33 +0,0 @@ -/* 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/stdlib/strtoull_l.c b/stdlib/strtoull_l.c deleted file mode 100644 index 53ecb916df..0000000000 --- a/stdlib/strtoull_l.c +++ /dev/null @@ -1,28 +0,0 @@ -/* 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/stdlib/strtoumax.c b/stdlib/strtoumax.c deleted file mode 100644 index 508cb19f8c..0000000000 --- a/stdlib/strtoumax.c +++ /dev/null @@ -1 +0,0 @@ -#error "The correct implementation must be chosen based on the `uintmax_t' type" diff --git a/stdlib/sub_n.c b/stdlib/sub_n.c deleted file mode 100644 index 7f429def89..0000000000 --- a/stdlib/sub_n.c +++ /dev/null @@ -1,53 +0,0 @@ -/* 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/stdlib/submul_1.c b/stdlib/submul_1.c deleted file mode 100644 index 9bc27df442..0000000000 --- a/stdlib/submul_1.c +++ /dev/null @@ -1,61 +0,0 @@ -/* 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/stdlib/swapcontext.c b/stdlib/swapcontext.c deleted file mode 100644 index decf2b9a9e..0000000000 --- a/stdlib/swapcontext.c +++ /dev/null @@ -1,29 +0,0 @@ -/* 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/stdlib/sys/errno.h b/stdlib/sys/errno.h deleted file mode 100644 index 339f4fc10c..0000000000 --- a/stdlib/sys/errno.h +++ /dev/null @@ -1 +0,0 @@ -#include <errno.h> diff --git a/stdlib/sys/random.h b/stdlib/sys/random.h deleted file mode 100644 index 90a0aca15c..0000000000 --- a/stdlib/sys/random.h +++ /dev/null @@ -1,42 +0,0 @@ -/* 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/stdlib/system.c b/stdlib/system.c deleted file mode 100644 index 026ab77768..0000000000 --- a/stdlib/system.c +++ /dev/null @@ -1,35 +0,0 @@ -/* 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/stdlib/tens_in_limb.c b/stdlib/tens_in_limb.c deleted file mode 100644 index b6e35aa35a..0000000000 --- a/stdlib/tens_in_limb.c +++ /dev/null @@ -1,31 +0,0 @@ -#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/stdlib/test-a64l.c b/stdlib/test-a64l.c deleted file mode 100644 index b3e1b2e846..0000000000 --- a/stdlib/test-a64l.c +++ /dev/null @@ -1,80 +0,0 @@ -/* 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/stdlib/test-canon.c b/stdlib/test-canon.c deleted file mode 100644 index d664f73c45..0000000000 --- a/stdlib/test-canon.c +++ /dev/null @@ -1,235 +0,0 @@ -/* 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/stdlib/test-canon2.c b/stdlib/test-canon2.c deleted file mode 100644 index bb676cd865..0000000000 --- a/stdlib/test-canon2.c +++ /dev/null @@ -1,74 +0,0 @@ -/* 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/stdlib/testdiv.c b/stdlib/testdiv.c deleted file mode 100644 index 4ba3843c69..0000000000 --- a/stdlib/testdiv.c +++ /dev/null @@ -1,39 +0,0 @@ -/* 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/stdlib/testdiv.input b/stdlib/testdiv.input deleted file mode 100644 index 415b7b4f54..0000000000 --- a/stdlib/testdiv.input +++ /dev/null @@ -1,2 +0,0 @@ -10 3 --10 3 diff --git a/stdlib/testmb.c b/stdlib/testmb.c deleted file mode 100644 index 45dae7db61..0000000000 --- a/stdlib/testmb.c +++ /dev/null @@ -1,65 +0,0 @@ -#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/stdlib/testmb2.c b/stdlib/testmb2.c deleted file mode 100644 index 3a3e354629..0000000000 --- a/stdlib/testmb2.c +++ /dev/null @@ -1,31 +0,0 @@ -/* 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/stdlib/testrand.c b/stdlib/testrand.c deleted file mode 100644 index fdfc4e5694..0000000000 --- a/stdlib/testrand.c +++ /dev/null @@ -1,52 +0,0 @@ -/* 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/stdlib/testsort.c b/stdlib/testsort.c deleted file mode 100644 index aa4332a568..0000000000 --- a/stdlib/testsort.c +++ /dev/null @@ -1,36 +0,0 @@ -#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/stdlib/tst-atof1.c b/stdlib/tst-atof1.c deleted file mode 100644 index 879d866558..0000000000 --- a/stdlib/tst-atof1.c +++ /dev/null @@ -1,19 +0,0 @@ -#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/stdlib/tst-atof2.c b/stdlib/tst-atof2.c deleted file mode 100644 index 74dac87b0d..0000000000 --- a/stdlib/tst-atof2.c +++ /dev/null @@ -1,55 +0,0 @@ -#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/stdlib/tst-bsearch.c b/stdlib/tst-bsearch.c deleted file mode 100644 index 766b11bc61..0000000000 --- a/stdlib/tst-bsearch.c +++ /dev/null @@ -1,153 +0,0 @@ -/* 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/stdlib/tst-empty-env.c b/stdlib/tst-empty-env.c deleted file mode 100644 index 0b0651d530..0000000000 --- a/stdlib/tst-empty-env.c +++ /dev/null @@ -1,58 +0,0 @@ -/* 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/stdlib/tst-environ.c b/stdlib/tst-environ.c deleted file mode 100644 index b2301641f5..0000000000 --- a/stdlib/tst-environ.c +++ /dev/null @@ -1,229 +0,0 @@ -/* 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/stdlib/tst-fmtmsg.c b/stdlib/tst-fmtmsg.c deleted file mode 100644 index b7948c5f1e..0000000000 --- a/stdlib/tst-fmtmsg.c +++ /dev/null @@ -1,85 +0,0 @@ -#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/stdlib/tst-fmtmsg.sh b/stdlib/tst-fmtmsg.sh deleted file mode 100755 index bcbe2e3348..0000000000 --- a/stdlib/tst-fmtmsg.sh +++ /dev/null @@ -1,337 +0,0 @@ -#!/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/stdlib/tst-getrandom.c b/stdlib/tst-getrandom.c deleted file mode 100644 index e84a83f248..0000000000 --- a/stdlib/tst-getrandom.c +++ /dev/null @@ -1,245 +0,0 @@ -/* 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/stdlib/tst-limits.c b/stdlib/tst-limits.c deleted file mode 100644 index 9aabc360f6..0000000000 --- a/stdlib/tst-limits.c +++ /dev/null @@ -1,72 +0,0 @@ -/* 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/stdlib/tst-makecontext.c b/stdlib/tst-makecontext.c deleted file mode 100644 index d7ffad5f64..0000000000 --- a/stdlib/tst-makecontext.c +++ /dev/null @@ -1,110 +0,0 @@ -/* 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/stdlib/tst-makecontext2.c b/stdlib/tst-makecontext2.c deleted file mode 100644 index 0d078279a8..0000000000 --- a/stdlib/tst-makecontext2.c +++ /dev/null @@ -1,79 +0,0 @@ -/* 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/stdlib/tst-makecontext3.c b/stdlib/tst-makecontext3.c deleted file mode 100644 index ccdeb4a282..0000000000 --- a/stdlib/tst-makecontext3.c +++ /dev/null @@ -1,220 +0,0 @@ -/* 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/stdlib/tst-putenv.c b/stdlib/tst-putenv.c deleted file mode 100644 index 47513ea42b..0000000000 --- a/stdlib/tst-putenv.c +++ /dev/null @@ -1,18 +0,0 @@ -#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/stdlib/tst-putenvmod.c b/stdlib/tst-putenvmod.c deleted file mode 100644 index 7c0c337d3f..0000000000 --- a/stdlib/tst-putenvmod.c +++ /dev/null @@ -1,17 +0,0 @@ -#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/stdlib/tst-qsort.c b/stdlib/tst-qsort.c deleted file mode 100644 index 2b26e74d0b..0000000000 --- a/stdlib/tst-qsort.c +++ /dev/null @@ -1,55 +0,0 @@ -/* 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/stdlib/tst-qsort2.c b/stdlib/tst-qsort2.c deleted file mode 100644 index 10d16852b0..0000000000 --- a/stdlib/tst-qsort2.c +++ /dev/null @@ -1,89 +0,0 @@ -#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/stdlib/tst-quick_exit.cc b/stdlib/tst-quick_exit.cc deleted file mode 100644 index b46fafed5c..0000000000 --- a/stdlib/tst-quick_exit.cc +++ /dev/null @@ -1,47 +0,0 @@ -/* 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/stdlib/tst-rand48-2.c b/stdlib/tst-rand48-2.c deleted file mode 100644 index 8b8fef4430..0000000000 --- a/stdlib/tst-rand48-2.c +++ /dev/null @@ -1,116 +0,0 @@ -#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/stdlib/tst-rand48.c b/stdlib/tst-rand48.c deleted file mode 100644 index 973c62e1eb..0000000000 --- a/stdlib/tst-rand48.c +++ /dev/null @@ -1,393 +0,0 @@ -#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/stdlib/tst-random.c b/stdlib/tst-random.c deleted file mode 100644 index 8fe0993dd7..0000000000 --- a/stdlib/tst-random.c +++ /dev/null @@ -1,122 +0,0 @@ -/* 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/stdlib/tst-random2.c b/stdlib/tst-random2.c deleted file mode 100644 index 093e16879c..0000000000 --- a/stdlib/tst-random2.c +++ /dev/null @@ -1,61 +0,0 @@ -/* 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/stdlib/tst-secure-getenv.c b/stdlib/tst-secure-getenv.c deleted file mode 100644 index 2705cf9c5b..0000000000 --- a/stdlib/tst-secure-getenv.c +++ /dev/null @@ -1,242 +0,0 @@ -/* 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/stdlib/tst-setcontext.c b/stdlib/tst-setcontext.c deleted file mode 100644 index 20b2ff6f3b..0000000000 --- a/stdlib/tst-setcontext.c +++ /dev/null @@ -1,244 +0,0 @@ -/* 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/stdlib/tst-setcontext2.c b/stdlib/tst-setcontext2.c deleted file mode 100644 index 07fb974c46..0000000000 --- a/stdlib/tst-setcontext2.c +++ /dev/null @@ -1,230 +0,0 @@ -/* 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/stdlib/tst-setcontext3.c b/stdlib/tst-setcontext3.c deleted file mode 100644 index 414a9a7f41..0000000000 --- a/stdlib/tst-setcontext3.c +++ /dev/null @@ -1,138 +0,0 @@ -/* 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/stdlib/tst-setcontext3.sh b/stdlib/tst-setcontext3.sh deleted file mode 100644 index 158d0dc0a8..0000000000 --- a/stdlib/tst-setcontext3.sh +++ /dev/null @@ -1,52 +0,0 @@ -#!/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/stdlib/tst-strfmon_l.c b/stdlib/tst-strfmon_l.c deleted file mode 100644 index 49fa31907e..0000000000 --- a/stdlib/tst-strfmon_l.c +++ /dev/null @@ -1,220 +0,0 @@ -/* 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/stdlib/tst-strfrom-locale.c b/stdlib/tst-strfrom-locale.c deleted file mode 100644 index f01b42d575..0000000000 --- a/stdlib/tst-strfrom-locale.c +++ /dev/null @@ -1,91 +0,0 @@ -/* 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/stdlib/tst-strfrom.c b/stdlib/tst-strfrom.c deleted file mode 100644 index 5aa54fa7cb..0000000000 --- a/stdlib/tst-strfrom.c +++ /dev/null @@ -1,91 +0,0 @@ -/* 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/stdlib/tst-strfrom.h b/stdlib/tst-strfrom.h deleted file mode 100644 index 86c0c19392..0000000000 --- a/stdlib/tst-strfrom.h +++ /dev/null @@ -1,120 +0,0 @@ -/* 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/stdlib/tst-strtod-nan-locale-main.c b/stdlib/tst-strtod-nan-locale-main.c deleted file mode 100644 index 8044dad89f..0000000000 --- a/stdlib/tst-strtod-nan-locale-main.c +++ /dev/null @@ -1,89 +0,0 @@ -/* 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/stdlib/tst-strtod-nan-locale.c b/stdlib/tst-strtod-nan-locale.c deleted file mode 100644 index cf0820df75..0000000000 --- a/stdlib/tst-strtod-nan-locale.c +++ /dev/null @@ -1,25 +0,0 @@ -/* 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/stdlib/tst-strtod-overflow.c b/stdlib/tst-strtod-overflow.c deleted file mode 100644 index c1eb561dec..0000000000 --- a/stdlib/tst-strtod-overflow.c +++ /dev/null @@ -1,49 +0,0 @@ -/* 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/stdlib/tst-strtod-round-data b/stdlib/tst-strtod-round-data deleted file mode 100644 index cb908036fd..0000000000 --- a/stdlib/tst-strtod-round-data +++ /dev/null @@ -1,150 +0,0 @@ -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/stdlib/tst-strtod-round-data.h b/stdlib/tst-strtod-round-data.h deleted file mode 100644 index fc09bc9117..0000000000 --- a/stdlib/tst-strtod-round-data.h +++ /dev/null @@ -1,11584 +0,0 @@ -/* 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/stdlib/tst-strtod-round-skeleton.c b/stdlib/tst-strtod-round-skeleton.c deleted file mode 100644 index 73603e6158..0000000000 --- a/stdlib/tst-strtod-round-skeleton.c +++ /dev/null @@ -1,252 +0,0 @@ -/* 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/stdlib/tst-strtod-round.c b/stdlib/tst-strtod-round.c deleted file mode 100644 index 2990d544d4..0000000000 --- a/stdlib/tst-strtod-round.c +++ /dev/null @@ -1,24 +0,0 @@ -/* 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/stdlib/tst-strtod-underflow.c b/stdlib/tst-strtod-underflow.c deleted file mode 100644 index f623a6be90..0000000000 --- a/stdlib/tst-strtod-underflow.c +++ /dev/null @@ -1,225 +0,0 @@ -/* 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/stdlib/tst-strtod.c b/stdlib/tst-strtod.c deleted file mode 100644 index 1ab7f8a5aa..0000000000 --- a/stdlib/tst-strtod.c +++ /dev/null @@ -1,218 +0,0 @@ -/* 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/stdlib/tst-strtod.h b/stdlib/tst-strtod.h deleted file mode 100644 index bf5f90138f..0000000000 --- a/stdlib/tst-strtod.h +++ /dev/null @@ -1,49 +0,0 @@ -/* 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/stdlib/tst-strtod1i.c b/stdlib/tst-strtod1i.c deleted file mode 100644 index 6f79425667..0000000000 --- a/stdlib/tst-strtod1i.c +++ /dev/null @@ -1,84 +0,0 @@ -/* 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/stdlib/tst-strtod2.c b/stdlib/tst-strtod2.c deleted file mode 100644 index a7df82ebbd..0000000000 --- a/stdlib/tst-strtod2.c +++ /dev/null @@ -1,44 +0,0 @@ -#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/stdlib/tst-strtod3.c b/stdlib/tst-strtod3.c deleted file mode 100644 index 23abec1896..0000000000 --- a/stdlib/tst-strtod3.c +++ /dev/null @@ -1,55 +0,0 @@ -#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/stdlib/tst-strtod4.c b/stdlib/tst-strtod4.c deleted file mode 100644 index 2d9d54c944..0000000000 --- a/stdlib/tst-strtod4.c +++ /dev/null @@ -1,56 +0,0 @@ -#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/stdlib/tst-strtod5.c b/stdlib/tst-strtod5.c deleted file mode 100644 index 8976e39a58..0000000000 --- a/stdlib/tst-strtod5.c +++ /dev/null @@ -1,89 +0,0 @@ -/* 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/stdlib/tst-strtod5i.c b/stdlib/tst-strtod5i.c deleted file mode 100644 index 7e319585bb..0000000000 --- a/stdlib/tst-strtod5i.c +++ /dev/null @@ -1,100 +0,0 @@ -/* 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/stdlib/tst-strtod6.c b/stdlib/tst-strtod6.c deleted file mode 100644 index 9bfbdc2b38..0000000000 --- a/stdlib/tst-strtod6.c +++ /dev/null @@ -1,57 +0,0 @@ -#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/stdlib/tst-strtol-locale-main.c b/stdlib/tst-strtol-locale-main.c deleted file mode 100644 index 5de61e7b16..0000000000 --- a/stdlib/tst-strtol-locale-main.c +++ /dev/null @@ -1,87 +0,0 @@ -/* 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/stdlib/tst-strtol-locale.c b/stdlib/tst-strtol-locale.c deleted file mode 100644 index 1d5092ba84..0000000000 --- a/stdlib/tst-strtol-locale.c +++ /dev/null @@ -1,25 +0,0 @@ -/* 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/stdlib/tst-strtol.c b/stdlib/tst-strtol.c deleted file mode 100644 index 5b80622e07..0000000000 --- a/stdlib/tst-strtol.c +++ /dev/null @@ -1,626 +0,0 @@ -/* 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/stdlib/tst-strtoll.c b/stdlib/tst-strtoll.c deleted file mode 100644 index de39ee3a5e..0000000000 --- a/stdlib/tst-strtoll.c +++ /dev/null @@ -1,401 +0,0 @@ -/* 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/stdlib/tst-system.c b/stdlib/tst-system.c deleted file mode 100644 index 6cb62e1248..0000000000 --- a/stdlib/tst-system.c +++ /dev/null @@ -1,30 +0,0 @@ -/* 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/stdlib/tst-thread-quick_exit.cc b/stdlib/tst-thread-quick_exit.cc deleted file mode 100644 index 047df6043d..0000000000 --- a/stdlib/tst-thread-quick_exit.cc +++ /dev/null @@ -1,66 +0,0 @@ -/* 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/stdlib/tst-tininess.c b/stdlib/tst-tininess.c deleted file mode 100644 index c032454f96..0000000000 --- a/stdlib/tst-tininess.c +++ /dev/null @@ -1,69 +0,0 @@ -/* 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/stdlib/tst-tls-atexit-lib.c b/stdlib/tst-tls-atexit-lib.c deleted file mode 100644 index a227e4653c..0000000000 --- a/stdlib/tst-tls-atexit-lib.c +++ /dev/null @@ -1,38 +0,0 @@ -/* 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/stdlib/tst-tls-atexit-nodelete.c b/stdlib/tst-tls-atexit-nodelete.c deleted file mode 100644 index 2293685144..0000000000 --- a/stdlib/tst-tls-atexit-nodelete.c +++ /dev/null @@ -1,24 +0,0 @@ -/* 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/stdlib/tst-tls-atexit.c b/stdlib/tst-tls-atexit.c deleted file mode 100644 index 6dbf49d460..0000000000 --- a/stdlib/tst-tls-atexit.c +++ /dev/null @@ -1,156 +0,0 @@ -/* 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/stdlib/tst-unsetenv1.c b/stdlib/tst-unsetenv1.c deleted file mode 100644 index a2a760d241..0000000000 --- a/stdlib/tst-unsetenv1.c +++ /dev/null @@ -1,12 +0,0 @@ -#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/stdlib/tst-width-stdint.c b/stdlib/tst-width-stdint.c deleted file mode 100644 index 9a4c4167b2..0000000000 --- a/stdlib/tst-width-stdint.c +++ /dev/null @@ -1,185 +0,0 @@ -/* 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/stdlib/tst-width.c b/stdlib/tst-width.c deleted file mode 100644 index 326bd9d37d..0000000000 --- a/stdlib/tst-width.c +++ /dev/null @@ -1,87 +0,0 @@ -/* 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/stdlib/tst-xpg-basename.c b/stdlib/tst-xpg-basename.c deleted file mode 100644 index baf5361747..0000000000 --- a/stdlib/tst-xpg-basename.c +++ /dev/null @@ -1,69 +0,0 @@ -/* 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/stdlib/ucontext.h b/stdlib/ucontext.h deleted file mode 100644 index 2cef5f7869..0000000000 --- a/stdlib/ucontext.h +++ /dev/null @@ -1,52 +0,0 @@ -/* 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/stdlib/udiv_qrnnd.c b/stdlib/udiv_qrnnd.c deleted file mode 100644 index d32796c04d..0000000000 --- a/stdlib/udiv_qrnnd.c +++ /dev/null @@ -1,10 +0,0 @@ -/* 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/stdlib/wcstoimax.c b/stdlib/wcstoimax.c deleted file mode 100644 index f1de70f320..0000000000 --- a/stdlib/wcstoimax.c +++ /dev/null @@ -1 +0,0 @@ -#error "The correct implementation must be chosen based on the `intmax_t' type" diff --git a/stdlib/wcstombs.c b/stdlib/wcstombs.c deleted file mode 100644 index 7e1667b4a1..0000000000 --- a/stdlib/wcstombs.c +++ /dev/null @@ -1,35 +0,0 @@ -/* 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/stdlib/wcstoumax.c b/stdlib/wcstoumax.c deleted file mode 100644 index 508cb19f8c..0000000000 --- a/stdlib/wcstoumax.c +++ /dev/null @@ -1 +0,0 @@ -#error "The correct implementation must be chosen based on the `uintmax_t' type" diff --git a/stdlib/wctomb.c b/stdlib/wctomb.c deleted file mode 100644 index c14d4266ec..0000000000 --- a/stdlib/wctomb.c +++ /dev/null @@ -1,57 +0,0 @@ -/* 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/stdlib/xpg_basename.c b/stdlib/xpg_basename.c deleted file mode 100644 index 57120f9cb2..0000000000 --- a/stdlib/xpg_basename.c +++ /dev/null @@ -1,71 +0,0 @@ -/* 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; -} |